Powershell调用WebRequest时出现问题

Powershell调用WebRequest时出现问题,powershell,invoke-webrequest,Powershell,Invoke Webrequest,当我尝试执行命令时 Invoke-WebRequest -Uri example.com/zip.zip -OutFile C:\SomePath\zip.zip PowerShell只想了几秒钟就退出了,PowerShell窗口正在消失。 但当我只输入Invoke WebRequest时,它会要求我输入参数,但当我逐个输入参数时效果相同。为了下载文件,Invoke WebRequest并不是最理想的方式,因为HTTP响应流被缓冲到内存中,一旦文件被完全加载,那么只有它会被刷新到磁盘上。对于

当我尝试执行命令时

 Invoke-WebRequest -Uri example.com/zip.zip -OutFile C:\SomePath\zip.zip
PowerShell只想了几秒钟就退出了,PowerShell窗口正在消失。
但当我只输入
Invoke WebRequest
时,它会要求我输入参数,但当我逐个输入参数时效果相同。

为了下载文件,
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如何优于调用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”文件夹。

Invoke WebRequest用于从Internet上的“网页”获取内容。使用上述cmdlet,您到底想要实现什么?请澄清您的要求。我只想使用PowerShell从github下载文件,我知道它可以工作,因为我在干净的windows 10 vitrual maschine中检查了它,它工作了。感谢您的帮助,但不是它。我试图下载任何.exe文件。msi,但它就是不工作,而要解压zip,我只是使用expandarchive命令。命令帮助起作用,因此它不是internet/防火墙问题。Idk有没有一种方法可以阻止Power Shell的某些功能?如果没有,是否有方法检查PowerShell文件完整性/重新安装?我不知道了。你在你的机器上使用的是哪个PowerShell版本?运行此cmdlet检查PS版本:
获取主机|选择对象版本
我现在无法检查它,但它是PowerShell 5.1.19041.1的windows 10版本的默认版本,我还发现您需要提升的PowerShell来使用
下载文件(新的对象系统.Net.WebClient)。下载文件(url,输出)