Powershell - wprowadzenie



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.


Cmdlet'y

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

Powershell
aktualizacja wersji