V minulém dílejsme se podívali na některé z novinek PowerShellu v5. Dnes povídání dokončíme a ukážeme si jednu novinku z oblasti Windows obecně.
PSScriptAnalyzer
Ano, pokud jste pozorní, pamatujete si, že o této části jsem již psal. Od doby napsání článku došlo ovšem ke změně. PSScriptAnalyzer byl přesunut jako samostatný projekt na GitHub (https://github.com/PowerShell/PSScriptAnalyzer). Zde si jej můžete stáhnout a naimportovat jako modul. Zároveň s tím bude v dalších verzích PowerShellu tento modul vyjmut jako standardní součást.
Desired State Configuration
V DSC došlo k asi největšímu počtu změn. K nejzajímavějším bych řadil především:
- Vytváření nových zdrojů (resources) pomocí tříd. Použití tříd (classes) v PowerShellu je také jednou z novinek v PowerShellu v5 a umožňuje více programátorsky laděným správcům využívat možnosti objektově orientovaného programování přímo v PowerShellu.
- Nyní můžete v ISE využít rozšířenou podporu pro práci s DSC (např. zvýrazňování syntaxe, doplňování, …)
- Nové zdroje WaitForAll, WaitForSome, WaitForAny umožňují lépe sledovat závislosti mezi jednotlivými kroky. V následujícím obrázku vidíte např. v DSC jazyce ukázané použití WaitForAll při přidávání počítače do domény
- Get-DscConfigurationStatus umožňuje zjišťovat aktuální stav dané konfigurace v jednotlivých nodech.
- Compare-DscConfiguration umí porovnat konfiguraci oproti jinému stavu, což přináší výhody při tvorbě a sledování DSC skriptů.
To byl výčet toho nejzajímavějšího z DSC. Opět jedno z témat pro budoucí články je podrobnější vhled do DSC a využití všech novinek.
Cryptographic Message Syntax
CMS přináší možnost šifrování textu přímov PowerShellu. Pokud máte certifikát typu “Document Encryption”, můžete v PowerShellu použít CMS cmdlety pro šifrování např. krátkého textu.
Nano Server
Před pár dny představil Microsoft nový operační systém, který je navržen pro běh v cloudu. Jmenuje se Nano Server a jedná se o minimalistickou (nano) verzi Windows Serveru. Pokud Server Core byl krokem k OS bez GUI, jde Nano Server ještě dál. Pokud se podíváme na velikost WMI souboru, uvidíme překvapivou velikost (malost?).
Mělo by se jednat o OS, který bude mít rapidně menší množství updatů, rychlejší restarty a měl by být zaměřen převážně na dva scénáře: podpora cloudových aplikací a tvorba cloud infrastruktury. Nebudu zde ale zabíhat do marketingových čísel, informace si můžete najít sami. Co je zajímavé, je možnost administrace pomocí vzdáleného PowerShellu a WMI.
Nano Server můžete aktuálně stáhnout jako součást Windows 10 Server Technical Preview 2 (bohužel bylo potřeba opravdu stáhnout asi 4GB ISO, abych mohl získat 200MB) a dle návodu na stránkách Microsoftu si jej nainstalovat například na Hyper-V (viz aktuální strip Mistra Skriptíka).
Po spuštění a připojení se na server, se můžete podívat na aktuální verzi PowerShellu.
[10.100.10.100]: PS C:\> $PSVersionTable
Name Value
---- -----
PSRemotingProtocolVersion 2.3
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34011
WSManStackVersion 3.0
PSVersion 5.0.10074.0
BuildVersion 10.0.10074.0
PowerShell je již ve verzi 5. Jak jsem již psal výše, administrace probíhá přes WMI (resp. CIM cmdlety), proto neexistuje například cmdlet Ge-Service. Potřebné informace můžete ale samozřejmě získat CIM.
[10.100.10.100]: PS C:\> Get-CimInstance Win32_Service
ProcessId Name StartMode State Status ExitCode
--------- ---- --------- ----- ------ --------
1328 BFE Auto Running OK 0
0 BITS Manual Stopped OK 1077
0 ClusSvc Disabled Stopped OK 1077
1204 CryptSvc Auto Running OK 0
596 DcomLaunch Auto Running OK 0
0 defragsvc Manual Stopped OK 1077
596 DeviceInstall Manual Running OK 0
1104 Dhcp Auto Running OK 0
1452 DiagTrack Auto Running OK 0
1204 Dnscache Auto Running OK 0
1104 EventLog Auto Running OK 0
0 IKEEXT Manual Stopped OK 1077
0 KeyIso Manual Stopped OK 1077
708 LanmanServer Auto Running OK 0
1204 LanmanWorkstation Auto Running OK 0
1104 lmhosts Manual Running OK 0
1328 MpsSvc Auto Running OK 0
0 Netlogon Manual Stopped OK 1077
0 NetSetupSvc Manual Stopped OK 0
1172 nsi Auto Running OK 0
596 Power Auto Running OK 0
708 ProfSvc Auto Running OK 0
0 RemoteRegistry Manual Stopped OK 1077
644 RpcEptMapper Auto Running OK 0
644 RpcSs Auto Running OK 0
0 sacsvr Manual Stopped OK 1077
464 SamSs Auto Running OK 0
708 Schedule Auto Running OK 0
0 seclogon Manual Stopped OK 1077
0 SmbWitness Manual Stopped OK 1077
0 smphost Manual Stopped OK 1077
0 swprv Manual Stopped OK 1077
596 SystemEventsBroker Auto Running OK 0
0 TieringEngineService Manual Stopped OK 1077
0 TimeBroker Manual Stopped OK 1077
0 TrustedInstaller Manual Stopped OK 0
0 VaultSvc Manual Stopped OK 1077
0 vmicguestinterface Manual Stopped OK 1077
860 vmicheartbeat Manual Running OK 0
884 vmicshutdown Manual Running OK 0
1104 vmictimesync Manual Running OK 0
0 vmicvmsession Manual Stopped OK 1077
0 vmms Auto Stopped OK 87
0 VSS Manual Stopped OK 1077
1172 W32Time Auto Running OK 0
0 WerSvc Manual Stopped OK 0
1464 WinDefend Auto Running OK 0
1172 WinHttpAutoProxySvc Manual Running OK 0
708 winmgmt Auto Running OK 0
1204 WinRM Auto Running OK 0
0 wmiApSrv Manual Stopped OK 1077
0 wuauserv Manual Stopped OK 2147942450
0 wudfsvc Manual Stopped OK 1077
To samé platí pro Get-CimInstance Win32_Process.
Pokud se podíváme na počet core cmdletů, dostaneme číslo 184, což je o několik desítek cmdletů méně než v „normální“ verzi OS Windows. Seznam dostupných cmdletů naleznete v následující tabulce:
Add-Content | Get-ChildItem | Join-Path | Rename-ItemProperty |
Add-History | Get-Command | Measure-Command | Resolve-Path |
Add-Member | Get-Content | Measure-Object | Resume-Job |
Clear-Content | Get-Credential | Move-Item | Select-Object |
Clear-History | Get-Culture | Move-ItemProperty | Select-String |
Clear-Item | Get-Date | New-Alias | Set-Alias |
Clear-ItemProperty | Get-Event | New-Event | Set-AuthenticodeSignature |
Clear-Variable | Get-EventSubscriber | New-Item | Set-Content |
Compare-Object | Get-ExecutionPolicy | New-ItemProperty | Set-Date |
Connect-PSSession | Get-FormatData | New-Module | Set-ExecutionPolicy |
Connect-WSMan | Get-Help | New-ModuleManifest | Set-Item |
ConvertFrom-Csv | Get-History | New-Object | Set-ItemProperty |
ConvertFrom-StringData | Get-Host | New-PSDrive | Set-Location |
Convert-Path | Get-Item | New-PSSession | Set-PSBreakpoint |
ConvertTo-Csv | Get-ItemProperty | New-PSSessionConfigurationFile | Set-PSDebug |
Copy-Item | Get-ItemPropertyValue | New-PSSessionOption | Set-PSSessionConfiguration |
Copy-ItemProperty | Get-Job | New-PSTransportOption | Set-StrictMode |
Debug-Job | Get-Location | New-TimeSpan | Set-Variable |
Debug-Runspace | Get-Member | New-Variable | Set-WSManInstance |
Disable-PSBreakpoint | Get-Module | New-WSManInstance | Set-WSManQuickConfig |
Disable-PSRemoting | Get-Process | New-WSManSessionOption | Sort-Object |
Disable-PSSessionConfiguration | Get-PSBreakpoint | Out-Default | Split-Path |
Disable-RunspaceDebug | Get-PSCallStack | Out-File | Start-Job |
Disable-WSManCredSSP | Get-PSDrive | Out-Host | Start-Sleep |
Disconnect-PSSession | Get-PSHostProcessInfo | Out-Null | Stop-Job |
Disconnect-WSMan | Get-PSProvider | Out-String | Suspend-Job |
Enable-PSBreakpoint | Get-PSSession | Pop-Location | Tee-Object |
Enable-PSRemoting | Get-PSSessionConfiguration | Push-Location | Test-ModuleManifest |
Enable-PSSessionConfiguration | Get-Random | Read-Host | Test-Path |
Enable-RunspaceDebug | Get-Runspace | Receive-Job | Test-PSSessionConfigurationFile |
Enable-WSManCredSSP | Get-RunspaceDebug | Receive-PSSession | Test-WSMan |
Enter-PSHostProcess | Get-UICulture | Register-ArgumentCompleter | Unblock-File |
Enter-PSSession | Get-Unique | Register-EngineEvent | Unregister-Event |
Exit-PSHostProcess | Get-Variable | Register-ObjectEvent | Unregister-PSSessionConfiguration |
Exit-PSSession | Get-WSManCredSSP | Register-PSSessionConfiguration | Wait-Debugger |
Export-Alias | Get-WSManInstance | Remove-Event | Wait-Event |
Export-Csv | Group-Object | Remove-Item | Wait-Job |
Export-FormatData | Import-Alias | Remove-ItemProperty | Wait-Process |
Export-ModuleMember | Import-Csv | Remove-Job | Where-Object |
ForEach-Object | Import-LocalizedData | Remove-Module | Write-Debug |
Format-Custom | Import-Module | Remove-PSBreakpoint | Write-Error |
Format-List | Invoke-Command | Remove-PSDrive | Write-Host |
Format-Table | Invoke-Expression | Remove-PSSession | Write-Output |
Format-Wide | Invoke-History | Remove-Variable | Write-Progress |
Get-Alias | Invoke-Item | Remove-WSManInstance | Write-Verbose |
Get-AuthenticodeSignature | Invoke-WSManAction | Rename-Item | Write-Warning |
Nano Server je rozhodně jedno z témat, kterému se budeme někdy v budoucnu z pohledu PowerShellu věnovat. Jsem velmi zvědav na to, jak rychle se budou objevovat updaty a novinky pro tuto verzi OS.