Problema encontrado en el servidor con Powershell v 4.0 (servidores con Powershell 5.1 no parecen afectados por el mismo problema)
Este es un comportamiento extraño deInvocar-WebRequestdominio.
Tome este ejemplo:
Por alguna razón, necesito saber el tamaño del archivo antes de descargarlo en mi servidor.
Luego uso los siguientes comandos:
$WebClient = Invoke-WebRequest -Uri $element -Method Head -Credential $Cred
$filesize = $webClient.Headers.'Content-Length'
El problema esantes de enviar$WebClient solicita el uso de Powershell (para confirmar RAM) alrededor de 120 MB, perodespués de la solicitudpowershell aumenta su RAM con el valor del archivo $filesize (el archivo remoto de ejemplo es 800 MB, la nueva RAM de confirmación es 920 MB).
Cuando trabaja con una sesión de Powershell WinRM limitada a 1 GB de RAM, esto puede ser un problema. (OOM)
Respuesta1
Puede utilizar Invoke-WebRequest
el HEAD
método para obtener solo los encabezados y no descargar nada. Si el recurso que estás solicitando tiene una longitud conocida, obtendrás un Content-Length
encabezado que puedes usar:
(Invoke-WebRequest $url -Method Head).Headers.'Content-Length'
Solo tenga en cuenta que no todos los servidores devuelven el Content-Length
encabezado de todas las solicitudes. En ese caso, necesitará utilizar el método anterior, que lee el archivo completo, aunque es más lento y desperdicia memoria.
También puede interactuar directamente con las DLL de Windows que realizan solicitudes de Internet, ya sea Winnet (no disponible en Windows Server), o usando Servicios HTTP de Windows.