Necesito descargar una serie del canal 9 usando powershell, sin embargo, los scripts que he probado tienen errores:
Este guion
$url="https://channel9.msdn.com/blogs/OfficeDevPnP/feed/mp4high" $rss=invoke-webrequest -uri $url $destination="D:\Videos\OfficePnP" [xml]$rss.Content|foreach{ $_.SelectNodes("rss/channel/item/enclosure") }|foreach{ "Checking $($_.url.split("/")[-1]), we will skip it if it already exists in $($destination)" if(!(test-path ($destination + $_.url.split("/")[-1]))){ "Downloading: " + $_.url start-bitstransfer $_.url $destination } }
falló con error:
El contenido de la respuesta no se puede analizar porque el motor de Internet Explorer no está disponible o la configuración del primer inicio de Internet Explorer no está completa. Especifique el parámetro UseBasicParsing y vuelva a intentarlo.
También probé este
# --- settings --- $feedUrl = "https://channel9.msdn.com/blogs/OfficeDevPnP/feed/mp4high" $mediaType = "mp4high" $overwrite = $false $destinationDirectory = join-path ([Environment]::GetFolderPath("MyDocuments")) "OfficeDevPnP" # --- locals --- $webClient = New-Object System.Net.WebClient # --- functions --- function PromptForInput ($prompt, $default) { $selection = read-host "$prompt`r`n(default: $default)" if ($selection) {$selection} else {$default} } function DownloadEntries { param ([string]$feedUrl) $feed = [xml]$webClient.DownloadString($feedUrl) $progress = 0 $pagepercent = 0 $entries = $feed.rss.channel.item.Length $invalidChars = [System.IO.Path]::GetInvalidFileNameChars() $feed.rss.channel.item | foreach { $url = New-Object System.Uri($_.enclosure.url) $name = $_.title $extension = [System.IO.Path]::GetExtension($url.Segments[-1]) $fileName = $name + $extension $invalidchars | foreach { $filename = $filename.Replace($_, ' ') } $saveFileName = join-path $destinationDirectory $fileName $tempFilename = $saveFilename + ".tmp" $filename if ((-not $overwrite) -and (Test-Path -path $saveFileName)) { write-progress -activity "$fileName already downloaded" -status "$pagepercent% ($progress / $entries) complete" -percentcomplete $pagepercent } else { write-progress -activity "Downloading $fileName" -status "$pagepercent% ($progress / $entries) complete" -percentcomplete $pagepercent $webClient.DownloadFile($url, $tempFilename) rename-item $tempFilename $saveFileName } $pagepercent = [Math]::floor((++$progress)/$entries*100) } } # --- do the actual work --- [string]$feedUrl = PromptForInput "Enter feed URL" $feedUrl [string]$mediaType = PromptForInput "Enter media type`r`n(options:Wmv,WmvHigh,mp4,mp4high,zune,mp3)" $mediaType $feedUrl += $mediaType [string]$destinationDirectory = PromptForInput "Enter destination directory" $destinationDirectory # if dest dir doesn't exist, create it if (!(Test-Path -path $destinationDirectory)) { New-Item $destinationDirectory -type directory } DownloadEntries $feedUrl
con demasiados errores
powershell
internet-explorer
Luis Valencia
fuente
fuente
Respuestas:
En su solicitud web de invocación, simplemente use el parámetro
-UseBasicParsing
por ejemplo, en su script (línea 2) debe usar:
$rss = Invoke-WebRequest -Uri $url -UseBasicParsing
Según la documentación , este parámetro es necesario en sistemas donde IE no está instalado o configurado:
fuente
UseBasicParsing
está haciendo:Uses the response object for HTML content without Document Object Model (DOM) parsing. This parameter is required when Internet Explorer is not installed on the computers, such as on a Server Core installation of a Windows Server operating system.
copia de aquí: docs.microsoft.com/de-de/powershell/module/…Para que funcione sin modificar sus scripts:
Encontré una solución aquí: http://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/
El error probablemente se deba a que IE aún no se ha lanzado por primera vez, lo que abre la ventana siguiente. Ejecútelo y pase por esa pantalla, y luego el mensaje de error no volverá a aparecer. No es necesario modificar ningún script.
fuente
Es seguro porque el comando Invoke-WebRequest tiene una dependencia en los ensamblados de Internet Explorer y lo está invocando para analizar el resultado según el comportamiento predeterminado. Como sugiere Matt, simplemente puede iniciar IE y hacer su selección en el indicador de configuración que aparece en el primer inicio. Y el error que experimente desaparecerá.
Pero esto solo es posible si ejecuta sus scripts de PowerShell como el mismo usuario de Windows con el que inició el IE. La configuración de IE se almacena en su perfil de Windows actual. Entonces, si usted, como yo, ejecuta su tarea en un programador en un servidor como usuario del SISTEMA, esto no funcionará.
Entonces aquí tendrá que cambiar sus scripts y agregar el argumento -UseBasicParsing, como en este ejemplo:
$WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing
fuente
Puede deshabilitar la necesidad de ejecutar la primera configuración de inicio de Internet Explorer ejecutando este script de PowerShell, ajustará la propiedad de registro correspondiente:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Internet Explorer\Main" -Name "DisableFirstRunCustomize" -Value 2
Después de esto, WebClient funcionará sin problemas.
fuente
También he tenido este problema, y aunque -UseBasicParsing funcionará para algunos, si realmente necesita interactuar con el dom, no funcionará. Intente usar una política de grupo para evitar que aparezca la ventana de configuración inicial y PowerShell ya no lo detendrá. Consulte aquí https://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/
Me tomó solo unos minutos una vez que encontré esta página, una vez que el GP esté configurado, powershell le permitirá pasar.
fuente
En su solicitud web de invocación, simplemente use el parámetro -UseBasicParsing
por ejemplo, en su script (línea 2) debe usar:
$rss = Invoke-WebRequest -UseBasicParsing
Según la documentación, este parámetro es necesario en sistemas donde IE no está instalado o configurado.
Utiliza el objeto de respuesta para contenido HTML sin análisis del modelo de objetos de documento (DOM). Este parámetro es necesario cuando Internet Explorer no está instalado en los equipos, como en una instalación Server Core de un sistema operativo Windows Server.
fuente
Otro método más para resolver: actualizar el registro. En mi caso no pude alterar GPO, y -UseBasicParsing rompe partes del acceso al sitio web. También tenía un usuario de servicio sin permisos de inicio de sesión, por lo que no pude iniciar sesión como usuario y ejecutar la GUI.
Arreglar,
En el archivo
fuente