【问题标题】:Problem with Powershell Invoke-WebRequestPowershell Invoke-WebRequest 的问题
【发布时间】:2020-09-18 12:44:55
【问题描述】:

当我尝试执行命令时

 Invoke-WebRequest -Uri example.com/zip.zip -OutFile C:\SomePath\zip.zip

PowerShell 只是想了几秒钟然后退出,PowerShell 窗口就消失了。 但是当我只输入Invoke-WebRequest时,它会要求我输入参数,但是当我一个一个输入参数时效果是一样的。

【问题讨论】:

  • Invoke-WebRequest 旨在从 Internet 上的“网页”获取内容。您究竟想使用上述 cmdlet 实现什么?请说明您的要求。
  • 我只想使用 PowerShell 从 github 下载文件,我知道它可以工作,因为我在干净的 Windows 10 虚拟机中检查过它并且它工作正常。

标签: powershell invoke-webrequest


【解决方案1】:

为了下载文件,Invoke-WebRequest 不是最佳方式,因为 HTTP 响应流被缓冲到内存中,并且一旦文件被完全加载,那么只有它会被刷新到磁盘。如果文件很大,这可能会影响性能。

我建议您使用System.Net.WebClient DotNET 类从您的 GitHub 源下载文件。您可以将代码重构为以下内容:

$url = "http://github.com/zip.zip"
$output = "C:\SomePath\zip.zip"
(New-Object System.Net.WebClient).DownloadFile($url, $output)

这个 cmdlet 与 Invoke-WebRequest 相比有何优势?你可能会问。

使用 System.Net.WebClient,速度/性能得到很大提高,因为 HTTP 响应流在整个下载过程中直接缓冲到磁盘(而不是将工作拆分为获取和刷新任务)。

注意:确保本地输出文件(您在 $output 中为其提供路径)是有效文件并且存在,否则在使用 DownloadFile 方法时可能会出错.

更新:

由于上述解决方案在压缩文件的情况下似乎无法按预期工作,这里有另一种解决方法,可用于使用 PowerShell 实现此目的:

$url = "http://github.com/zip.zip" 
$zipOutput = "C:\ZipOutput\" + $(Split-Path -Path $url -Leaf) 
$extractedOutput = "C:\ExtractedOutput\"
(New-Object System.Net.WebClient).DownloadFile($url, $zipOutput)
$shellObj = New-Object -ComObject Shell.Application 
$files = $shellObj.Namespace($zipOutput).Items() 
$shellObj.NameSpace($extractedOutput).CopyHere($files) 
Start-Process $extractedOutput

zip 文件将被下载到$zipOutput 提供的路径,脚本将进一步提取内容并将提取的内容存储在$extractedOutput 提供的路径中。确保执行此脚本的计算机上存在“C:\ZipOutput”和“C:\ExtractedOutput”文件夹。

【讨论】:

  • 感谢您的大力帮助,但事实并非如此。我试图下载任何文件 .exe 。 zip .msi 但它不起作用,解压缩 zip 我只是使用 Expand-Archive 命令。命令帮助有效,因此它不是互联网/防火墙问题。 Idk 有没有办法可以阻止 Power Shell 的某些功能?如果没有,有没有办法检查 PowerShell 文件的完整性/重新安装它?我不知道了。
  • 您的机器上使用的是哪个 PowerShell 版本?运行此 cmdlet 以检查 PS 版本:Get-Host | Select-Object Version
  • 我现在无法检查,但它是 Windows 10 的默认版本
  • PowerShell 5.1.19041.1 版本我还发现您需要提升 PowersShell 才能使用 (New-Object System.Net.WebClient).DownloadFile(url, output) 下载文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 2020-02-28
  • 2021-07-22
  • 2012-07-26
相关资源
最近更新 更多