使用invoke-webrequest下载文件
Posted feiyucha
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用invoke-webrequest下载文件相关的知识,希望对你有一定的参考价值。
下载SMB
如果您在混合IT环境中工作,则通常需要在PowerShell脚本中从云下载或上载文件。
如果仅使用通过服务器消息块(SMB)协议进行通信的Windows服务器,则只需使用Copy-Item cmdlet从网络共享中复制文件:
Copy-Item \\server\share\file -Destination c:\path\
在PowerShell中下载2
下一个简单的情况是您必须从Web或FTP服务器下载文件
在PowerShell 2中,您必须为此目的使用New-Object cmdlet:
$webClient=New-Object System.Net.WebClient $webClient.DownloadFile($url,"c:\2.png")
从PowerShell 3开始,我们有了Invoke-WebRequest cmdlet,它更方便使用
它是PowerShell与GNU wget的对应物,GNU wget是Linux世界中的一个流行工具,这可能是微软决定将其名称用作Invoke-WebRequest的别名的原因
这或许是轻描淡写; Invoke-WebRequest比wget更强大,因为它不仅可以下载文件,还可以解析它们
使用Invoke-WebRequest下载
要通过http简单的下载文件,可以使用以下命令:
Invoke-WebRequest -Uri "http://www.example.com" -OutFile "C:\path\file"
如果省略文件夹的本地路径,Invoke-WebRequest将只使用您当前的文件夹
如果要保存文件,则始终需要-Outfile参数。 原因是,默认情况下,Invoke-WebRequest将下载的文件发送到管道。
但是,管道将不仅包含文件的内容。 相反,您将找到一个具有各种属性和方法的对象,允许您分析文本文件。
如果通过管道发送二进制文件,PowerShell会将其视为文本文件,您将无法使用该文件中的数据。
要只读取文本文件的内容,我们需要读取管道中对象的Content属性:
Invoke-WebRequest "http://www.example.com" | Select-Object -ExpandProperty Content | Out-File "file"
如果要将文件放在管道中并将其存储在本地,则必须使用-PassThru参数:
Invoke-WebRequest "http://www.contoso.com" -OutFile "file" -PassThru | Select-Object -ExpandProperty Content
在Web服务器上进行身份验证
如果Web服务器需要身份验证,则必须使用-Credential参数:
Invoke-WebRequest -Uri https://www.example.com/ -OutFile C:"\path\file" -Credential "yourUserName"
请注意,如果省略-Credential参数,PowerShell将不会提示您输入用户名和密码,并将抛出此错误:
Invoke-WebRequest:需要授权
您必须至少使用-Credential参数传递用户名。 然后PowerShell会要求输入密码。
如果要避免脚本中的对话窗口,可以将凭据存储在PSCredential对象中:
$Credentials = Get-Credential Invoke-WebRequest -Uri "https://www.example.com" -OutFile "C:\path\file" -Credential $Credentials
如果要使用当前用户的凭据,可以使用-UseDefaultCredentials参数而不是-Credential参数
要添加一些额外的安全性,您可能需要加密密码。如果必须在远程服务器上进行身份验证,请确保始终使用HTTPS而不是HTTP。
如果Web服务器使用基本身份验证,则如果通过HTTP下载,则密码将以明文形式传输。
请注意,此方法仅在Web服务器管理身份验证时有效。如今,大多数网站都使用内容管理系统(CMS)的功能来对用户进行身份验证。通常,您必须填写html表单。
以上是关于使用invoke-webrequest下载文件的主要内容,如果未能解决你的问题,请参考以下文章
从 powershell 下载文件时,Invoke-WebRequest 进度变得无响应/暂停
Powershell Invoke-Webrequest 下载并保存所有文件?
如何使用 cacert 文件在 Powershell (Invoke-WebRequest) 中执行 cUrl 等效项?