Open Source Powershell v6 - Forstättningen

Denna artikel är en fortsättning på del ett som finns här på bloggen, har du inte läst den rekomenderar jag att du gör det innan du läser denna. Första delen hittar du här: http://langate.se/blogg/943/open-source-powershell-v6/ 

Jag kommer här att fortsätta jämföra Microsoft PowerShell med PowerShell och diskutera lite hur detta påverkar användandet av Powershell nu och i framtiden. 

I första delen nämndes vilka moduler som medföljer PowerShell v6. Även om en modul finns för både Microsoft PowerShell och PowerShell så innebär det inte automatiskt att innehållet är identiskt.



Som framgår av bilden ovan så innehåller modulen Microsoft.Powershell.Diagnostics fem cmdlets i Microsoft PowerShell men bara två cmdlets i PowerShell.

En annan skillnad är att Workflows inte finns kvar i PowerShell v6. Tanken är att de ska ersättas med cmdlets för enklare åtkomst till Powershell Runspaces. WMI-cmdlets finns inte (men CIM-cmdlets finns såklart). Som framgår av föregående bild finns inga cmdlets för hantering av Eventlog eller Performance counters. Det ska komma ett Windows PowerShell Compatibility Pack som gör att WMI, Eventlog och performance counter cmdlets kan användas. Likaså ska det komma API som gör att vissa existerande moduler för Microsoft PowerShell kommer att fungera med PowerShell v6+.



Tyvärr finns inte Powershell ISE (Integrated Scripting Environment) för PowerShell v6 vilket många säkert kommer att sakna. Tanken är att Visual Studio Code ska ersätta ISE som utvecklingsmiljö för skript i framtiden. Detta är i sig inget dålig, snarare tvärt om då Code har fler funktioner än ISE. Har man vant sig vid ISE så kommer det ta tid att vänja sig vid Code.

En del Windows PowerShell moduler som bygger på CDXML och CIM class kommer att fungera för PowerShell redan nu. Exempelvis networing och storage modulerna. Binära moduler som kompilerats för .NET (och inte .NET core) kommer inte fungera. Många RSAT verktyg fungerar inte och Exchange modulerna fungerar inte alls.

Man kan enkelt lägga till Windows PowerShell v5.1 modulerna till sökvägen för moduler i PowerShell v.6 på följande sätt:

 

Vill vi slippa göra ovanstående varje gång vi startar PowerShell v6 så kan vi lägga till raden till vår PowerShell v6 profil som återfinns här: 



En annan stor grej med PowerShell v6 är remote management. I många cmdlets för v5.1 finns parametern -ComputerName som använder RPC eller DCOM (inte bra) för att köra kommandot på maskiner via nätverket. Parametern -ComputerName har tagits bort (eller kommer att tas bort) för alla cmdlets i PowerShell v6. Microsoft PowerShell v.5.1 kan som bekant köra PSRemote (via WSMAN vilket är bra) för fjärradministration men enbart mot Windows-maskiner. PowerShell v6 kan ansluta via WSMAN till Windows-maskiner men kan även ansluta via WSMAN till Linux-maskiner (dock inte riktigt klart i nuvarande version). PowerShell v6 stödjer också fjärranslutning via SSH (installation av OpenSSH via Appar och funktioner -Valfria funktioner krävs). Detta innebär enklare fjärranslutning även för Windows-maskiner som ej är domänanslutna ifall SSH-används (OpenSSH Server krävs då).

CIM-cmdlets använder WSMAN men går att köra via DCOM om man vill. Det går inte att skapa en CIM session via SSH.

Powershell Direct (anslut remote från Hyper-V host till virtuella maskiner via VM bus direkt) fungerar i PowerShell v6 om vi importerar Hyper-V modulen.

PowerShell v6.1 är tänkt att släppas i juni/juli 2018 och uppdateringar beräknas komma var 6:e månad. En Road Map för PowerShell finns här: https://blogs.msdn.microsoft.com/powershell/2018/01/24/powershell-core-6-1-roadmap/

Avslutningsvis så är mitt råd till alla som använder Powershell att hålla koll på PowerShell v6 då det uppdateras ofta och kommer på sikt att ersätta Microsoft PowerShell. Har man flera icke-domänanslutna datorer och många linuxmaskiner så bör man testa PowerShell v6 redan nu.