如何使用Invoke-WebRequest下载文件,但自动使文件名与我通过浏览器下载的文件名相同?我没有找到一种方法来-OutFile工作而无需手动指定文件名.我很好,涉及其他几行代码.
一个好的解决方案将:
http://go.microsoft.com/fwlink/?LinkId=393217下载文件rtools_setup_x64.exe.谢谢!
对于给出的示例,您将需要获取重定向的URL,其中包括要下载的文件名.您可以使用以下函数执行此操作:
Function Get-RedirectedUrl {
Param (
[Parameter(Mandatory=$true)]
[String]$URL
)
$request = [System.Net.WebRequest]::Create($url)
$request.AllowAutoRedirect=$false
$response=$request.GetResponse()
If ($response.StatusCode -eq "Found")
{
$response.GetResponseHeader("Location")
}
}
Run Code Online (Sandbox Code Playgroud)
然后,这是从响应URL的末尾解析文件名的问题(来自System.IO.Path的GetFileName将执行此操作):
$FileName = [System.IO.Path]::GetFileName((Get-RedirectedUrl "http://go.microsoft.com/fwlink/?LinkId=393217"))
Run Code Online (Sandbox Code Playgroud)
这将离开$FileName = rtools_setup_x64.exe,你应该能够从那里下载你的文件.
试试这个方法(可能并不总是有效,因为文件名可能不在响应头中)
inline; filename="zzzz.docx"这是代码示例:
$result = Invoke-WebRequest -Method GET -Uri $url -Headers $headers
$contentDisposition = $result.Headers.'Content-Disposition'
$fileName = $contentDisposition.Split("=")[1].Replace("`"","")
$path = Join-Path $yourfoldername $fileName
$file = [System.IO.FileStream]::new($path, [System.IO.FileMode]::Create)
$file.write($result.Content, 0, $result.RawContentLength)
$file.close()
Run Code Online (Sandbox Code Playgroud)
感谢 Ryan 我有一个半可用的功能:
Function Get-Url {
param ( [parameter(position=0)]$uri )
invoke-webrequest -uri "$uri" -outfile $(split-path -path "$uri" -leaf)
}
Run Code Online (Sandbox Code Playgroud)
我已经能够下载图形文件和xml文件。当我尝试下载此网页并使用 Edge 打开它时,它有时会起作用。
| 归档时间: |
|
| 查看次数: |
11440 次 |
| 最近记录: |