Problema encontrado no servidor com Powershell v 4.0 (servidor com Powershell 5.1 eles não parecem afetados pelo mesmo problema)
Este é um comportamento estranho deInvocar-WebRequestcomando.
Veja este exemplo:
Por algum motivo, preciso saber o tamanho do arquivo antes de baixá-lo no meu servidor.
Então eu uso os seguintes comandos:
$WebClient = Invoke-WebRequest -Uri $element -Method Head -Credential $Cred
$filesize = $webClient.Headers.'Content-Length'
O problema éantes de enviar$WebClient solicita uso do Powershell (para Commit RAM) cerca de 120 MB, masdepois do pedidoO PowerShell aumenta sua RAM para o valor $filesize do arquivo (o arquivo remoto de exemplo tem 800 MB, a nova RAM de commit tem 920 MB).
Quando você trabalha com uma sessão Powershell WinRM limitada a 1 GB de RAM, isso pode ser um problema. (OOM)
Responder1
Você pode usar Invoke-WebRequest
o HEAD
método para obter apenas os cabeçalhos e não baixar nada. Se o recurso que você está solicitando tiver um comprimento conhecido, você receberá um Content-Length
cabeçalho que poderá usar:
(Invoke-WebRequest $url -Method Head).Headers.'Content-Length'
Observe que nem todos os servidores retornam o Content-Length
cabeçalho para todas as solicitações. Nesse caso, você precisará usar o método acima, que lê o arquivo inteiro, embora seja mais lento e desperdice memória.
Você também pode interagir diretamente com as DLLs do Windows que fazem solicitações da Internet, seja WinINet (não disponível no Windows Server) ou usando Serviços HTTP do Windows.