Preciso baixar uma série do canal 9 usando o PowerShell, mas os scripts que tentei apresentam erros:
Este script
$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 } }
falhou com erro:
O conteúdo da resposta não pode ser analisado porque o mecanismo do Internet Explorer não está disponível ou a configuração de primeira inicialização do Internet Explorer não está completa. Especifique o parâmetro UseBasicParsing e tente novamente.
Eu também tentei 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
com muitos erros
powershell
internet-explorer
Luis valencia
fonte
fonte
Respostas:
Em sua solicitação da web invoke, apenas use o parâmetro
-UseBasicParsing
por exemplo, em seu script (linha 2) você deve usar:
De acordo com a documentação , este parâmetro é necessário em sistemas onde o IE não está instalado ou configurado:
fonte
UseBasicParsing
está fazendo: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.
copiado daqui: docs.microsoft.com/de-de/powershell/module/…Para fazer funcionar sem modificar seus scripts:
Encontrei uma solução aqui: http://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/
O erro provavelmente está ocorrendo porque o IE ainda não foi iniciado pela primeira vez, exibindo a janela abaixo. Lance-o e passe por aquela tela, então a mensagem de erro não aparecerá mais. Não há necessidade de modificar nenhum script.
fonte
É certo porque o comando Invoke-WebRequest depende dos assemblies do Internet Explorer e o invoca para analisar o resultado conforme o comportamento padrão. Como Matt sugere, você pode simplesmente iniciar o IE e fazer sua seleção no prompt de configurações que aparece na primeira inicialização. E o erro que você experimentou desaparecerá.
Mas isso só é possível se você executar seus scripts do PowerShell como o mesmo usuário do Windows com quem você iniciou o IE. As configurações do IE são armazenadas em seu perfil atual do Windows. Portanto, se você, como eu, executar sua tarefa em um planejador em um servidor como o usuário SYSTEM, isso não funcionará.
Portanto, aqui você terá que alterar seus scripts e adicionar o argumento -UseBasicParsing, como neste exemplo:
$WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing
fonte
Você pode desabilitar a necessidade de executar a primeira configuração de inicialização do Internet Explorer executando este script do PowerShell, ele ajustará a propriedade de registro correspondente:
Depois disso, o WebClient funcionará sem problemas
fonte
Eu também tive esse problema e, embora -UseBasicParsing funcione para alguns, se você realmente precisar interagir com o dom, ele não funcionará. Tente usar uma política de grupo para impedir que a janela de configuração inicial apareça e o PowerShell não o impedirá mais. Veja aqui https://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/
Levei apenas alguns minutos depois que encontrei esta página, uma vez que o GP for definido, o PowerShell permitirá que você passe.
fonte
Em sua solicitação da web invocar, basta usar o parâmetro -UseBasicParsing
por exemplo, em seu script (linha 2) você deve usar:
De acordo com a documentação, este parâmetro é necessário em sistemas onde o IE não está instalado ou configurado.
Usa o objeto de resposta para conteúdo HTML sem análise de Document Object Model (DOM). Este parâmetro é necessário quando o Internet Explorer não está instalado nos computadores, como em uma instalação Server Core de um sistema operacional Windows Server.
fonte
Mais um método para resolver: atualizar o registro. No meu caso, não consegui alterar o GPO, e -UseBasicParsing interrompe partes do acesso ao site. Além disso, eu tinha um usuário de serviço sem permissões de login, então não pude fazer login como o usuário e executar a GUI.
Consertar,
No arquivo
fonte