Powershell v 4.0이 설치된 서버에서 문제가 발견되었습니다. (Powershell 5.1을 사용하는 서버는 동일한 문제의 영향을 받지 않는 것 같습니다)
이것은 이상한 행동입니다호출-웹 요청명령.
다음 예를 들어보세요.
어떤 이유에서인지 서버에 다운로드하기 전에 파일 크기를 알아야 합니다.
그런 다음 다음 명령을 사용합니다.
$WebClient = Invoke-WebRequest -Uri $element -Method Head -Credential $Cred
$filesize = $webClient.Headers.'Content-Length'
문제는보내기 전에$WebClient 요청 Powershell 사용(커밋 RAM용)은 약 120MB이지만요청 후powershell은 RAM을 파일 $filesize 값으로 확대합니다(예: 원격 파일은 800MB, 새 커밋 RAM은 920MB).
1GB RAM으로 제한된 Powershell WinRM 세션을 사용하여 작업하는 경우 이는 문제가 될 수 있습니다. (OOM)
답변1
Invoke-WebRequest
이 HEAD
메소드를 사용하면 헤더만 가져오고 아무것도 다운로드하지 않을 수 있습니다 . 요청하는 리소스의 길이가 알려진 경우 Content-Length
사용할 수 있는 헤더를 얻게 됩니다.
(Invoke-WebRequest $url -Method Head).Headers.'Content-Length'
모든 서버가 모든 요청에 대해 헤더를 반환하는 것은 아닙니다 Content-Length
. 이 경우 전체 파일을 읽는 위의 방법을 사용해야 하지만 속도가 느리고 메모리가 낭비됩니다.
인터넷 요청을 수행하는 Windows DLL에 직접 인터페이스할 수도 있습니다. WinINet (Windows Server에서는 사용할 수 없음) 또는 다음을 사용하여 Windows HTTP 서비스.