PowerShell Invoke-WebRequest, 원본 파일 이름을 자동으로 사용하는 방법은?
Invoke-WebRequest를 사용하여 파일을 다운로드하지만 자동으로 브라우저를 통해 다운로드한 파일 이름과 동일하게 만드는 방법은 무엇입니까?나는 만들 방법을 찾지 못했습니다.-OutFile
파일 이름을 수동으로 지정하지 않고 작업합니다.다른 코드 몇 줄을 포함해서 해도 괜찮습니다.
좋은 해결책은 다음과 같습니다.
- 요청 URL에 파일 이름이 없더라도 작동합니다. 예를 들어 Visual Studio x64 Remote Debugging Tools를 다운로드할 URL은
http://go.microsoft.com/fwlink/?LinkId=393217
하지만 그것은 파일을 다운로드 합니다.rtools_setup_x64.exe
. - 디스크에 쓰기 전에 전체 파일을 저장하지 마십시오. Invoke-WebRequest가 -OutFile 매개 변수(?)를 사용해도 이미 이 작업을 수행하지 않는 한.
감사합니다!
예를 들어 다운로드할 파일 이름을 포함하는 리디렉션 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")
}
}
그러면 응답 URL(시스템에서 GetFileName) 끝에서 파일 이름을 구문 분석하는 문제입니다.IO.Path가 그렇게 함):
$FileName = [System.IO.Path]::GetFileName((Get-RedirectedUrl "http://go.microsoft.com/fwlink/?LinkId=393217"))
떠나가겠습니다.$FileName = rtools_setup_x64.exe
거기서 파일을 다운로드 할 수 있을 겁니다.
라이언 덕분에 반쯤 쓸 수 있는 기능을 갖게 되었습니다.
Function Get-Url {
param ( [parameter(position=0)]$uri )
invoke-webrequest -uri "$uri" -outfile $(split-path -path "$uri" -leaf)
}
내가 다운로드 할 수 있었던 그래픽 파일과 xml 파일.이 웹 페이지를 다운로드하고 Edge를 사용하여 열려면 때때로 작동합니다.
이 방법을 사용해 보십시오. 파일 이름이 응답 헤더에 없을 수 있으므로 항상 작동하지 않을 수 있습니다.
- Invoke-WebRequest를 호출하여 결과를 가져옵니다.그런 다음 결과를 검사하여 머리글에 무엇이 있는지 확인할 수 있습니다.
- 응답 헤더에서 파일 이름을 가져옵니다(이 파일 이름은 헤더에 있을 수 있습니다).장소나 다른 장소.문제 해결 중인 url에 대한 쿼리를 실행하면 헤더["Content-Disposition"]에서 쿼리를 찾았고 다음과 같습니다.
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()
여러 출처를 바탕으로 이 내용을 정리했습니다. 여러 가지 방법으로 분석할 수 있습니다.Content-Disposition
머리말은 뭐든 다 써요
첫 통화:
$Response = Invoke-WebRequest $Url -Verbose
머리글 구문 분석:
$FileName = $Response.Headers.'Content-Disposition'.Split('=',2)[-1]
대안:
# Older PowerShell versions need to load this manually:
if ($PSVersionTable.PSVersion.Major -le 5) {
Add-Type -AssemblyName System.Net.Http
}
$FileName = [Net.Http.Headers.ContentDispositionHeaderValue]::Parse(
$Response.Headers.'Content-Disposition').FileName
파일 쓰기:
[IO.File]::WriteAllBytes($FileName, $Response.Content)
정리:
Remove-Variable Response -Force
[GC]::Collect()
powershell.exe Invoke-WebRequest-Uri 서버IP/file.exe -OutFile C:\Users\file.exe
언급URL : https://stackoverflow.com/questions/25125818/powershell-invoke-webrequest-how-to-automatically-use-original-file-name
'programing' 카테고리의 다른 글
OpenCSV: 사용자 지정 컬럼 헤더 및 사용자 지정 컬럼 위치를 사용하여 POJO에서 CSV 파일을 생성하는 방법은? (0) | 2023.10.30 |
---|---|
판다에서 개체별로 한 그룹에 속한 그룹의 수를 구하는 방법은? (0) | 2023.10.30 |
크롬이 로컬 jQuery 쿠키를 무시하는 이유는 무엇입니까? (0) | 2023.10.30 |
웹 브라우저에서 온블러와 포커스 아웃의 차이점은 무엇입니까? (0) | 2023.10.30 |
C++에서 안전 중요 소프트웨어를 위한 공식 방법 (0) | 2023.10.30 |