帶有方法頭的 Powershell Invoke-WebRequest 分配過多 RAM

帶有方法頭的 Powershell Invoke-WebRequest 分配過多 RAM

使用 Powershell v 4.0 在伺服器上發現問題 (使用 Powershell 5.1 的伺服器似乎沒有受到相同問題的影響)

這是一個奇怪的行為呼叫WebRequest命令。

舉個例子:

出於某種原因,我需要知道檔案大小,然後才能將其下載到我的伺服器上。

然後我使用以下命令:

$WebClient = Invoke-WebRequest -Uri $element -Method Head -Credential $Cred
$filesize = $webClient.Headers.'Content-Length'

問題是發送前$WebClient 請求 Powershell 使用(用於提交 RAM)大約 120MB,但是請求後powershell 將 RAM 增加至檔案 $filesize 值(範例遠端檔案為 800MB,新的 Commit RAM 為 920MB)。

當您使用僅限 1GB RAM 的 Powershell WinRM 會話時,這可能是一個問題。 (OOM)

答案1

您可以使用Invoke-WebRequestHEAD方法來僅獲取標頭而不下載任何內容。如果您要求的資源的長度已知,那麼您將獲得一個Content-Length可以使用的標頭:

(Invoke-WebRequest $url -Method Head).Headers.'Content-Length'

請注意,並非所有伺服器都會傳回Content-Length所有請求的標頭。在這種情況下,您將需要使用上述方法來讀取整個文件,儘管它速度較慢且浪費記憶體。

您也可以直接與執行 Internet 要求的 Windows DLL 連接 溫網 (在 Windows Server 上不可用),或使用 Windows HTTP 服務

相關內容