Windows Powershell to nic innego jak interpreter poleceń opracowany przez firmę Microsoft. Jest następcą windowsowego command line'a (cmd), choć ja bym go nazwał bardziej rozbudowaną alternatywą lub rozszerzeniem dla command line'a, gdyż cmd nie został wyparty przez powershell'a. Powershell jest mocno zintegrowany z .NET Framework, jeżeli nie macie w systemie .NET Framework'a, to nie nacieszycie się zbytnio powershellem, a przynajmniej nie jego w miarę aktualną wersją. A skoro mowa o wersjach, to mamy dostęp do wersji z zakresu 1.0 do 5.0 (przynajmniej na chwilę pisania artykułu). Każda kolejna wersja tego narzędzia jest bogatsza o nowe funkcjonalności, co za tym idzie, nie wszystkie skrypty działające na nowszych wersjach PS'a będą działały również na starszych.
Powershell operuje na cmdlet'ach. Czym są cmdlet'y? Można powiedzieć, że są to niewidoczne skrypty kryjące się pod pojedyńczymi komendami, oferujące pewien zakres funkcjonalności. Do dyspozycji mamy szereg wbudowanych w interpreter cmdlet'ów, mamy także możliwość napisania własnych. To między innymi w nich własnie zachodzi ścisła współpraca pomiędzy naszym interpreterem poleceń, a .NET Framework'iem. W dużym uproszczeniu korzystając z cmdlet'u w powershell'u wywołujemy jakąś funkcjonalność która zwraca nam obiekty .NET Framework'a. Przykładowo wpisując w powershell'u polecenie (cmdlet) Get-Process dostaniemy listę procesów w systemie.
PS C:\Windows\system32> Get-Process Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 170 11 6004 10736 ...96 0.38 3236 audiodg 119 10 4168 13176 ...62 11.86 2896 conhost 296 14 1236 3816 ...98 384 csrss 221 17 1288 4576 ...95 460 csrss 256 17 3668 11440 ...59 2172 dllhost 227 15 3700 10820 ...08 2292 dllhost 145 9 1632 7492 ...36 0.03 4284 dllhost 239 23 69716 85988 ...44 884 dwm 1758 81 27240 87348 ...14 81.28 1332 explorer 0 0 0 4 0 0 Idle 200 14 2660 13544 ...31 1.14 3988 InstallAgent 979 23 4700 12848 ...98 588 lsass 161 11 2148 7896 ...89 1820 MpCmdRun 186 14 2620 7848 ...97 2416 msdtc 667 67 104224 64800 ...91 1488 MsMpEng ...
Listę większości komend w powershell'u możemy dostać poprzez wywołanie komendy Get-Command. Dodatkowo możemy przefiltrować je ze względu na cmdlet'y wydając komendę z parametrem Type.
PS C:\Windows\system32> Get-Command -Type Cmdlet CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Add-AppxPackage 2.0.0.0 Appx Cmdlet Add-AppxProvisionedPackage 3.0 Dism Cmdlet Add-AppxVolume 2.0.0.0 Appx Cmdlet Add-BitsFile 2.0.0.0 BitsTransfer Cmdlet Add-CertificateEnrollmentPolicyServer 1.0.0.0 PKI Cmdlet Add-Computer 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Add-Content 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Add-History 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Add-JobTrigger 1.1.0.0 PSScheduledJob Cmdlet Add-KdsRootKey 1.0.0.0 Kds Cmdlet Add-Member 3.1.0.0 Microsoft.PowerShell.Utility Cmdlet Add-PSSnapin 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Add-Type 3.1.0.0 Microsoft.PowerShell.Utility Cmdlet Add-WindowsCapability 3.0 Dism Cmdlet Add-WindowsDriver 3.0 Dism ...
Lista dostępnych komend zależy od wersji powershell'a. Zazwyczaj z każdą kolejną wersją rozszerzano listę dostępnych funkcji. Kolumn z informacjami na temat komend może być znacznie więcej. Przykład możecie zobaczyć na poniższym obrazku. Pierwsza kolumna pokazuje nam nazwy kolumn z informacjami na temat danej komendy.
Na temat każdego cmdlet'a możemy wywołać okno pomocy, coś ala linuxowy manual. Aby to zrobić wykonujemy polecenie Get-help z nazwą cmd-let'a lub innego typu polecenia.
Co do wersji samego powershell'a to możemy ją sprawdzić wydając komendę $PSVersionTable
PS C:\Windows\system32> $PSVersionTable Name Value ---- ----- PSVersion 5.0.10240.16384 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.42000 BuildVersion 10.0.10240.16384 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} PSRemotingProtocolVersion 2.3