使用invoke-webrequest下载文件

下载SMB
  如果您在混合IT环境中工作,则通常需要在PowerShell脚本中从云下载或上载文件。
  如果仅使用通过服务器消息块(SMB)协议进行通信的Windows服务器,则只需使用Copy-Item cmdlet从网络共享中复制文件:

Copy-Item \serversharefile -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:pathfile"

  如果省略文件夹的本地路径,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:"pathfile" -Credential "yourUserName"

  请注意,如果省略-Credential参数,PowerShell将不会提示您输入用户名和密码,并将抛出此错误:
  Invoke-WebRequest:需要授权
  您必须至少使用-Credential参数传递用户名。 然后PowerShell会要求输入密码。
  如果要避免脚本中的对话窗口,可以将凭据存储在PSCredential对象中:

$Credentials = Get-Credential
Invoke-WebRequest -Uri "https://www.example.com" -OutFile "C:pathfile" -Credential $Credentials

  如果要使用当前用户的凭据,可以使用-UseDefaultCredentials参数而不是-Credential参数
  要添加一些额外的安全性,您可能需要加密密码。如果必须在远程服务器上进行身份验证,请确保始终使用HTTPS而不是HTTP。
  如果Web服务器使用基本身份验证,则如果通过HTTP下载,则密码将以明文形式传输。

  请注意,此方法仅在Web服务器管理身份验证时有效。如今,大多数网站都使用内容管理系统(CMS)的功能来对用户进行身份验证。通常,您必须填写HTML表单。

原文地址:https://www.cnblogs.com/feiyucha/p/11108585.html