Archive for 3. Februar 2018

Wichtige Unterschiede zwischen Powershell 5.1 und Powershell Core 6.x bei Invoke-WebRequest und Invoke-RestMethod

3 Februar 2018

Wenn man Invoke-WebRequest oder Invoke-RestMethod unter Powershell Core 6.x benutzt, sollte man im Zweifel nachfolgendes wissen. Die Namen sind die gleichen aber im Hintergrund haben sich einige Dinge geändert.

Ein sehr ausführlicher Artikel beschreibt die Unterschiede der Web-Cmdlets hier: https://get-powershellblog.blogspot.de/2017/11/powershell-core-web-cmdlets-in-depth.html.

So werden z. B. Header Variablen in Powershell Core strenger überprüft, siehe https://get-powershellblog.blogspot.com/2017/11/powershell-core-web-cmdlets-in-depth.html#L08. Um bestehende Scripte möglichst einfach weiterverwenden zu können, könnte man diese Umgebungsvariable setzen:

$PSDefaultParameterValues[‚Invoke-RestMethod:SkipHeaderValidation‘] = $true
$PSDefaultParameterValues[‚Invoke-WebRequest:SkipHeaderValidation‘] = $true

Damit kann man die strikte Header Prüfung abschalten.

Man muss sich auch bewusst sein, dass nun die Rückgabetypen andere sind als bisher. Man sollte also obigen Artikel unter https://get-powershellblog.blogspot.de/2017/11/powershell-core-web-cmdlets-in-depth.html#L09 genauer studieren. Vor allem kann dadurch teilweise die Logik eines Scripts einen ganz anderen Pfad bekommen!!

Nicht weniger wichtig ist das geänderte Verhalten bei Fehlern und Statuscodes: https://get-powershellblog.blogspot.com/2017/11/powershell-core-web-cmdlets-in-depth.html#L13.

Der zweite Artikel in der Blogserie beschreibt welche Features in Powershell Core 6.x im Vergleich zu Windows Powershell 5.1 nicht mehr vorhanden sind. https://get-powershellblog.blogspot.de/2017/12/powershell-core-web-cmdlets-in-depth.html.

Der wichtigste Punkt dabei ist, dass Invoke-WebRequest und Invoke-RestMethod nun keine file:// bzw. ftp://-Protokollle mehr unterstützen!! Nur noch http:// bzw. https:// werden unterstützt. Der zweite wichtige Punkt ist, dass ParsedHTML nicht mehr unterstützt wird, dieser Punkt ist logisch, weil auf den anderen Platformen kein Internet Explorer mit seinem DOM zur Verfügung steht. Dritter Punkt ist die komplette Abwesenheit von New-WebServiceProxy zur Abfrage von SOAP-Endpunkten.

Ein größeres Thema könnten Zertifikate werden, denn aufgrund der Crossplattform-Unterstützung kommen unterschiedliche Bibliotheken zum Einsatz, wo nicht alle Informationen in .Net Core durchgereicht werden und somit Powershell Core nicht zur Verfügung stehen!

OK den Wegfall von SSL 3.0 sollte zu verschmerzen sein, was allerdings blöd ist, ist der Wegfall der Unterstützung von ServicePointManager https://get-powershellblog.blogspot.com/2017/12/powershell-core-web-cmdlets-in-depth.html#L12. Diese Methode hatte früher hier z. B. Anwendung gefunden: https://newyear2006.wordpress.com/2014/07/26/bei-powershell-ssltls-zertifikate-prfung-einfach-ignorieren/. Eine mögliche Lösung ist allerdings Artikel 3 der Serie bei Parameter –SkipCertificateCheck beschrieben.

Der dritte Teil der Blogserie beschreibt Erweiterungen bzw. neue Features die bei Powershell Core in Invoke-WebRequest und Invoke-RestMethod Einzug gehalten haben https://get-powershellblog.blogspot.de/2017/12/powershell-core-web-cmdlets-in-depth_24.html.

Insgesamt haben die beiden Cmdlets 12 neue Parameter erhalten. Die wahrscheinlich wichtigsten sind die Unterstützung für OAuth Authentifizierung und Link-Parameter um REST-Aufrufen über mehrere Ergebnisseiten folgen zu können.

Darüberhinaus wird es mit Powershell Core 6.1.x noch weitere tolle neue Features geben, vor allem bezogen auf Formulare, siehe hier: https://get-powershellblog.blogspot.de/2018/01/powershell-core-61-web-cmdlets-roadmap.html.

Werbeanzeigen