PowerShell: Emulowanie wcześniejszej wersji PowerShella na komputerze z wyższą wersją

13-sty-2018

powershell.exe ma przełącznik pozwalający go uruchomić w trybie zgodności z niższą wersją.

pozwala to na przykład, tak jak na obrazku powyżej, przetestować, czy jakieś polecenie, którego z powodzeniem używamy w wyższej wersji powershella zadziała również na niższej. W tym przykładzie okazało się, że show-command nie jest rozpoznawane w powershell 2.0.

Ale czy aby na pewno zawsze to działa?

Widać nawet, że uruchomienie z przełacznikiem 4, 3 działa szybko i zachowowuje historię poprzednich komend i podświetlanie składni, a 2 uruchamia się dłużej, nie ma historii i podświetlania.

Wynika to z tego, że uzyskiwanie kompatybilności między wersjami 2 i wyższe jest trudne (są różnice w CLR). Dlatego „zrobili nam” przełacznik do uruchomienia 2.0. W przypadku powershella 3,4,5 – pracujemy pod spodem na tym samym CLR i przełącznika nie ma. Tylko głupio, że nie wyświetla się w tym momencie jakiś komunikat o błędzie, albo ostrzeżenie.

Na pociechę – najczęstszy problem (obecnie) jest taki, że admin ma nowy OS z nowym PowerShell, a na starszych serwerach jest właśnie Powershel 2.0

Zobacz tutaj:

https://stackoverflow.com/questions/44457274/can-i-run-powershell-in-version-3-or-4-mode-when-powershell-5-is-installed

Cytat:

PowerShell provides a special -Version 2.0 backwards compatibility mode that allows you to run PowerShell version 2 even when you have later versions installed:

The same is not true for all other versions of PowerShell, it is unfortunately not possible to force PowerShell to run as version 3 or 4 when PowerShell version 5 is installed (even though running PowerShell.exe -version 3 will not throw any kind of error/warning message). It is also not possible to have multiple PowerShell versions installed at the same time.

The only way to test PowerShell scripts with a version of PowerShell (other than 2) is to have alternative installs of PowerShell on separate computers or Virtual Machines.

oraz:

Windows PowerShell 4.0 and Windows PowerShell 3.0 are designed to be backwards compatible with Windows PowerShell 2.0. Cmdlets, providers, snap-ins, modules, and scripts written for Windows PowerShell 2.0 run unchanged in Windows PowerShell 4.0 and Windows PowerShell 3.0. However, due to a change in the runtime activation policy in Microsoft .NET Framework 4, Windows PowerShell host programs that were written for Windows PowerShell 2.0 and compiled with Common Language Runtime (CLR) 2.0 cannot run without modification in Windows PowerShell 3.0 or Windows PowerShell 4.0, which are compiled with CLR 4.0. The Windows PowerShell 2.0 Engine is intended to be used only when an existing script or host program cannot run because it is incompatible with Windows PowerShell 4.0, Windows PowerShell 3.0, or Microsoft .NET Framework 4. Such cases are expected to be rare.

https://msdn.microsoft.com/en-us/powershell/scripting/setup/starting-the-windows-powershell-2.0-engine

 

Komentarze są wyłączone

Autor: Rafał Kraik