Ich muss eine Channel 9-Serie mit Powershell herunterladen, aber die Skripte, die ich ausprobiert habe, weisen Fehler auf:
Dieses Skript
$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 } }
fehlgeschlagen mit Fehler:
Der Antwortinhalt kann nicht analysiert werden, da die Internet Explorer-Engine nicht verfügbar ist oder die Erststartkonfiguration von Internet Explorer nicht vollständig ist. Geben Sie den Parameter UseBasicParsing an und versuchen Sie es erneut.
Ich habe es auch versucht
# --- 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
mit zu vielen Fehlern
powershell
internet-explorer
Luis Valencia
quelle
quelle
Antworten:
Verwenden Sie in Ihrer aufgerufenen Webanforderung einfach den Parameter
-UseBasicParsing
zB in Ihrem Skript (Zeile 2) sollten Sie verwenden:
Gemäß der Dokumentation ist dieser Parameter auf Systemen erforderlich, auf denen der IE nicht installiert oder konfiguriert ist:
quelle
UseBasicParsing
tun ist: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.
von hier kopiert: docs.microsoft.com/de-de/powershell/module/…So funktioniert es, ohne Ihre Skripte zu ändern:
Ich habe hier eine Lösung gefunden: http://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/
Der Fehler tritt wahrscheinlich auf, weil der IE noch nicht zum ersten Mal gestartet wurde und das folgende Fenster geöffnet wird. Starten Sie es und gehen Sie durch diesen Bildschirm, und dann wird die Fehlermeldung nicht mehr angezeigt. Es müssen keine Skripte geändert werden.
quelle
Dies ist sicher, da der Befehl Invoke-WebRequest von den Internet Explorer-Assemblys abhängig ist und diese aufruft, um das Ergebnis gemäß dem Standardverhalten zu analysieren. Wie Matt vorschlägt, können Sie einfach den IE starten und Ihre Auswahl in der Eingabeaufforderung treffen, die beim ersten Start angezeigt wird. Und der Fehler, den Sie erleben, wird verschwinden.
Dies ist jedoch nur möglich, wenn Sie Ihre Powershell-Skripte als denselben Windows-Benutzer ausführen, mit dem Sie den IE gestartet haben. Die IE-Einstellungen werden unter Ihrem aktuellen Windows-Profil gespeichert. Wenn Sie also wie ich Ihre Aufgabe in einem Scheduler auf einem Server als SYSTEM-Benutzer ausführen, funktioniert dies nicht.
Hier müssen Sie also Ihre Skripte ändern und das Argument -UseBasicParsing hinzufügen, wie in diesem Beispiel dargestellt:
$WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing
quelle
Sie können die Notwendigkeit zum Ausführen der ersten Startkonfiguration von Internet Explorer deaktivieren, indem Sie dieses PowerShell-Skript ausführen. Dadurch wird die entsprechende Registrierungseigenschaft angepasst:
Danach funktioniert WebClient ohne Probleme
quelle
Verwenden Sie in Ihrer aufgerufenen Webanforderung einfach den Parameter -UseBasicParsing
zB in Ihrem Skript (Zeile 2) sollten Sie verwenden:
Laut Dokumentation ist dieser Parameter auf Systemen erforderlich, auf denen der IE nicht installiert oder konfiguriert ist.
Verwendet das Antwortobjekt für HTML-Inhalte ohne DOM-Analyse (Document Object Model). Dieser Parameter ist erforderlich, wenn Internet Explorer nicht auf den Computern installiert ist, z. B. bei einer Server Core-Installation eines Windows Server-Betriebssystems.
quelle
Ich hatte auch dieses Problem, und während -UseBasicParsing für einige funktioniert, funktioniert es nicht, wenn Sie tatsächlich mit dem Dom interagieren müssen. Verwenden Sie eine Gruppenrichtlinie, um zu verhindern, dass das Fenster für die Erstkonfiguration jemals angezeigt wird, und Powershell hält Sie nicht mehr auf. Siehe hier https://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/
Ich habe nur ein paar Minuten gebraucht, als ich diese Seite gefunden habe. Sobald der GP eingestellt ist, wird Powershell Sie durchlassen.
quelle
Noch eine andere zu lösende Methode: Aktualisierung der Registrierung. In meinem Fall konnte ich das Gruppenrichtlinienobjekt nicht ändern, und -UseBasicParsing unterbricht Teile des Zugriffs auf die Website. Außerdem hatte ich einen Dienstbenutzer ohne Anmeldeberechtigungen, sodass ich mich nicht als Benutzer anmelden und die GUI ausführen konnte.
Reparieren,
In der Datei
quelle