Powershelli tulevikust

Eelmine kord rääkisime sellest, kuidas tuvastada keskkonda, milles skript jookseb.  Sealt jäi välja üks pisiasi: kuidas tuvastada Nano Server või Server Core keskkonda.

Server Core keskkonnaga on lihtne, seal on meil tavaline Powerhsell keskkond ja OS funktsioonidega kaasatulevad haldusmoodulid.  Vajadusel saab seda kontrollida:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Server\ServerLevels\' -Name ServerCore

if (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Server\ServerLevels\' -Name ServerCore) {
  "Server Core"
} elseif (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Server\ServerLevels\' -Name NanoServer) {
  "Nano Server"
}

Nano Server keskkonnaga on natuke raskem.  Nimelt on seal ruumi kokkuhoiuks OS funktsionaalsust vähendatud, sealhulgas .Net Framework on seal .Net Core, mitte täielik .Net Framework.  Ja kuna Powershell sõltub .Net keskkonnast, siis on ka Powershelli funktsionaalsus vähendatud.  Lisaks on puudu terve hunnik haldusmooduleid, mis tavaliselt olemas on.  Vähendatud funktsionaalsusega keskkond on tuntud kui Powershell Core edition:

$PSVersionTable.PSEdition

if ($PSVersionTable.PSEdition -like 'Core') {
  Write-Verbose 'Powershell Core'
} else {
  Write-Verbose 'Full Powershell'
}

Skriptile võib lisada kontrolli, et vältida skripti käivitumist vales keskkonnas:

#Requires -Version 5.1
#Requires -PSEdition Core

Samuti on võimalik mooduli lisamisel/kasutamisel kontrollida, et see toetab keskkonda, kus teda kavatsetakse kasutada:

Find-Module -Tag PSEdition_Core

Get-Module -ListAvailable |
  Where-Object CompatiblePSEditions -Contains "Core"

Get-Module -ListAvailable | Where-Object {$_.CompatiblePSEditions}

Esialgu on moodulid ilma vajaliku infota manifestis, ent tulevikus peaksid moodulid seda infot sisaldama.  Samas on Powershell Gallery moodulid juba sildistatud.

Arvestades, et Powershell 6 on juba olemas, on oodata järgmisi muudatusi:

  • Windows Powershell 5.1 on viimane omast klassist ja seda edasi ei arendata.
    • Kõik Windows Powershelliga seotud probleemid/ettepanekud tuleb raporteerida UserVoice saidis.  Vigade parandusi väidetavasti veel tehakse.
  • Powershell v6 on täielikult Powershell Core.  Seda ei panda Windowsiga kaasa, kuna seda arendatakse korraga mitmele platvormile: Windows, Linux, macOS.
  • Powershell Core paigaldatakse Windows Powershelli kõrvale ja see tuleb käivitada kui pwsh.exe
  • kogu tulevane arendus saab toimuma Powershell Core peal.
    • kõik Powershell Core-ga seotud probeemid/ettepanekud tuleb esitada Github saidis.
  • Powershell Core ei sisalda enam järgmiseid asju:
    • Powershell ISE liides.  Arendustiim pakub alternatiivina kasutada Visual Studio Code redaktorit, mille Powershelli plugin on suht tasemel.
    • Töövoogude (workflow) mootor.
  • Desired State Configuration saab samuti ümber kirjutatud .Net Core baasil.
  • Powershell 2.0 režiimist on kavas lahti saada.

Powershell Core kasutamisel on vaja tuvastada ka OS, mille peal joostakse.  Kuna CimCmdlets moodul pole veel Powershell Core osa, kui OS ei ole Windows, siis tuleb OS tuvastada teist moodi:

$PSVersionTable.PSEdition

#Requires -PSEdition Core
$PSVersionTable.OS

if (($PSVersionTable.PSEdition -like "core") -and $PSVersionTable.OS) {
  "Powershell core, OS: {0}" -f $PSVersionTable.OS
} else {
  "Windows Powershell"
}

#Requires -Version 6
$IsWindows
$IsMacOs
$IsLinux

Praegu veel ei ole, aga tulevikus peaks moodulite manifesti ilmuma ka toetatud OS-i näitamine.

Kokkuvõtteks võib öelda, et juba praegu tasub vähehaaval oma skripte/mooduleid üle vaadata ning lisada vajalikud kontrollid, et vales keskkonnas mitte tundmatuid veateateid saada.

Advertisements