PowerShell ćwiczenia #Part 1 – jak wyszukiwać polecenia?

PowerShell ćwiczenia - jak wyszukiwać polecenia

Cześć! Witaj w zupełnie nowej, praktycznej serii wpisów poświęconych PowerShellowi. Jeśli chcesz sprawnie poruszać się w świecie automatyzacji i administracji, to jesteś we właściwym miejscu! Jak to mówią, praktyka czyni mistrza, dlatego w tej serii będziemy regularnie zgłębiać różne aspekty pracy z PowerShellem – od podstawowych poleceń po bardziej zaawansowane techniki. Nowe artykuły będą pojawiać się mniej więcej co dwa tygodnie, dostarczając ci solidnej dawki wiedzy, którą od razu będziesz mógł wykorzystać w codziennej pracy.

Dziś na tapetę bierzemy wyszukiwanie i poznawanie poleceń – umiejętność absolutnie kluczową dla każdego, kto chce efektywnie korzystać z PowerShella. Bo umówmy się – kto zawsze pamięta dokładną składnię wszystkich cmdletów?

No właśnie.

W tym artykule pokażę ci, jak szybko odnaleźć potrzebne polecenia, sprawdzić ich działanie i poszerzyć swoją wiedzę.

Gotowy?

No to lecimy!

# Ćwiczenie 1 – wylistuj wszystkie polecenia PowerShell

W pierwszej kolejności naszym zadaniem jest wylistowanie wszystkich dostępnych poleceń PowerShella. W tym celu wystarczy jedynie cmdlet Get-Command.

PS C:\Users\Admin> Get-Command

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Add-AdlAnalyticsDataSource                         1.0.3      Az.DataLakeAnalytics
Alias           Add-AdlAnalyticsFirewallRule                       1.0.3      Az.DataLakeAnalytics
Alias           Add-AdlStoreFirewallRule                           1.3.0      Az.DataLakeStore
Alias           Add-AdlStoreItemContent                            1.3.0      Az.DataLakeStore
Alias           Add-AdlStoreTrustedIdProvider                      1.3.0      Az.DataLakeStore
Alias           Add-AdlStoreVirtualNetworkRule                     1.3.0      Az.DataLakeStore
Alias           Add-AppPackage                                     2.0.1.0    Appx
Alias           Add-AppPackageVolume                               2.0.1.0    Appx
Alias           Add-AppProvisionedPackage                          3.0        Dism
...
Function        New-DAEntryPointTableItem                          1.0.0.0    DirectAccessClientComponents
Function        New-DscChecksum                                    1.1        PSDesiredStateConfiguration
Function        New-EapConfiguration                               2.0.0.0    VpnClient
Function        New-EtwTraceSession                                1.0.0.0    EventTracingManagement
Function        New-FileShare                                      2.0.0.0    Storage
Function        New-Fixture                                        3.4.0      Pester
Function        New-Guid                                           3.1.0.0    Microsoft.PowerShell.Utility
Function        New-HgsGuardian                                    1.0.0.0    HgsClient
Function        New-HgsKeyProtector                                1.0.0.0    HgsClient
Function        New-IscsiTargetPortal                              1.0.0.0    iSCSI
Function        New-IseSnippet                                     1.0.0.0    ISE
...
Cmdlet          Remove-AzPrivateDnsRecordConfig                    1.0.4      Az.PrivateDns
Cmdlet          Remove-AzPrivateDnsRecordSet                       1.0.4      Az.PrivateDns
Cmdlet          Remove-AzPrivateDnsVirtualNetworkLink              1.0.4      Az.PrivateDns
Cmdlet          Remove-AzPrivateDnsZone                            1.0.4      Az.PrivateDns
Cmdlet          Remove-AzPrivateDnsZoneGroup                       6.2.0      Az.Network
Cmdlet          Remove-AzPrivateEndpoint                           6.2.0      Az.Network
Cmdlet          Remove-AzPrivateEndpointConnection                 6.2.0      Az.Network
Cmdlet          Remove-AzPrivateLinkAssociation                    6.10.0     Az.Resources
Cmdlet          Remove-AzPrivateLinkService                        6.2.0      Az.Network
Cmdlet          Remove-AzProximityPlacementGroup                   6.3.0      Az.Compute
Cmdlet          Remove-AzPublicIpAddress                           6.2.0      Az.Network

Jak widzisz, PowerShell zwraca długą listę różnych poleceń. Co ciekawe, znajdują się tu nie tylko klasyczne cmdlety, czyli podstawowe polecenia PowerShella, ale także funkcje i aliasy. Oprócz samej nazwy i typu polecenia znajdziesz tu również informacje o wersji oraz module, z którego dane polecenie pochodzi. Warto pamiętać, że cmdlety zazwyczaj są częścią modułów, czyli zbiorów powiązanych ze sobą poleceń, które rozszerzają możliwości PowerShella.

Co ciekawe wykonanie  Get-Command uzupełnione o symbol * (czyli znak wieloznaczny) zwraca podobną listę dostępnych poleceń, ale dodatkowo znajdują się tutaj wszystkie pliki aplikacji (czyli pliki z rozszerzeniem.exe), które system znalazł w zmiennej środowiskowej PATH i do których mamy dostęp z konsoli.

PS C:\Users\Admin> Get-Command *

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ac -> Add-Content
Alias           Add-AdlAnalyticsDataSource                         1.0.3      Az.DataLakeAnalytics
Alias           Add-AdlAnalyticsFirewallRule                       1.0.3      Az.DataLakeAnalytics
Alias           Add-AdlStoreFirewallRule                           1.3.0      Az.DataLakeStore
Alias           Add-AdlStoreItemContent                            1.3.0      Az.DataLakeStore
Alias           Add-AdlStoreTrustedIdProvider                      1.3.0      Az.DataLakeStore
Alias           Add-AdlStoreVirtualNetworkRule                     1.3.0      Az.DataLakeStore
...
Application     wsmprovhost.exe                                    10.0.2610… C:\WINDOWS\system32\wsmprovhost.exe
Application     wsqmcons.exe                                       10.0.2610… C:\WINDOWS\system32\wsqmcons.exe
Application     WSReset.exe                                        10.0.2610… C:\WINDOWS\system32\WSReset.exe
Application     wt.exe                                             0.0.0.0    C:\Users\Admin\AppData\Local\Microsoft\W…
Application     wuapihost.exe                                      1308.2409… C:\WINDOWS\system32\wuapihost.exe
Application     wuauclt.exe                                        1309.2410… C:\WINDOWS\system32\wuauclt.exe
Application     WUDFCompanionHost.exe                              10.0.2610… C:\WINDOWS\system32\WUDFCompanionHost.exe
Application     WUDFHost.exe                                       10.0.2610… C:\WINDOWS\system32\WUDFHost.exe
Application     wusa.exe                                           10.0.2610… C:\WINDOWS\system32\wusa.exe
Application     WWAHost.exe                                        10.0.2610… C:\WINDOWS\system32\WWAHost.exe
Application     XblGameSaveTask.exe                                10.0.2610… C:\WINDOWS\system32\XblGameSaveTask.exe
Application     XboxPcAppAdminServer.exe                           0.0.0.0    C:\Users\Admin\AppData\Local\Microsoft\W…
Application     XboxPcAppCE.exe                                    0.0.0.0    C:\Users\Admin\AppData\Local\Microsoft\W…
Application     xcopy.exe                                          10.0.2610… C:\WINDOWS\system32\xcopy.exe
Application     xgamecontrol.exe                                   10.0.2610… C:\WINDOWS\system32\xgamecontrol.exe
Application     xgamehelper.exe                                    10.0.2610… C:\WINDOWS\system32\xgamehelper.exe
Application     xwizard.exe                                        10.0.2610… C:\WINDOWS\system32\xwizard.exe

# Ćwiczenie 2 – wylistuj tylko cmdlety

Aby nieco zmniejszyć zbiór poleceń, możemy ograniczyć się do konkretnego ich typu i właśnie na tym polega kolejne ćwiczenie. Tym razem wyświetlimy wszystkie dostępne cmdlety. Jak zapewne się domyślasz również skorzystamy z Get-Command tym razem jednak niezbędny będzie parametr -CommandType. Do wyboru jest kilka opcji nas w tym ćwiczeniu interesuje jednak typ cmdlet. A całe polecenie wygląda następująco:

PS C:\Users\Admin> Get-Command -CommandType Cmdlet

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Add-ADCentralAccessPolicyMember                    1.0.1.0    ActiveDirectory
Cmdlet          Add-ADComputerServiceAccount                       1.0.1.0    ActiveDirectory
Cmdlet          Add-ADDomainControllerPasswordReplicationPolicy    1.0.1.0    ActiveDirectory
Cmdlet          Add-ADFineGrainedPasswordPolicySubject             1.0.1.0    ActiveDirectory
Cmdlet          Add-ADGroupMember                                  1.0.1.0    ActiveDirectory
Cmdlet          Add-ADPrincipalGroupMembership                     1.0.1.0    ActiveDirectory
Cmdlet          Add-ADResourcePropertyListMember                   1.0.1.0    ActiveDirectory
Cmdlet          Add-AppProvisionedSharedPackageContainer           3.0        Dism
Cmdlet          Add-AppSharedPackageContainer                      2.0.1.0    Appx
Cmdlet          Add-AppxPackage                                    2.0.1.0    Appx
Cmdlet          Add-AppxProvisionedPackage                         3.0        Dism
Cmdlet          Add-AppxVolume                                     2.0.1.0    Appx
Cmdlet          Add-AzAnalysisServicesAccount                      1.1.4      Az.AnalysisServices
Cmdlet          Add-AzApiManagementApiToGateway                    4.0.2      Az.ApiManagement
Cmdlet          Add-AzApiManagementApiToProduct                    4.0.2      Az.ApiManagement
Cmdlet          Add-AzApiManagementProductToGroup                  4.0.2      Az.ApiManagement
Cmdlet          Add-AzApiManagementRegion                          4.0.2      Az.ApiManagement
Cmdlet          Add-AzApiManagementUserToGroup                     4.0.2      Az.ApiManagement
Cmdlet          Add-AzApplicationGatewayAuthenticationCertificate  6.2.0      Az.Network
Cmdlet          Add-AzApplicationGatewayBackendAddressPool         6.2.0      Az.Network

# Ćwiczenie 4 – wylistuj wszystkie cmdlety, które mają w nazwie rzeczownik „Computer”

W kolejnym ćwiczeniu ograniczymy się tylko do poleceń, które posiadają w nazwie wyraz Computer, a dokładnie rzecz ujmując, których rzeczownik jest właśnie tym wyrazem. Dlatego też w tym wypadku skorzystamy z parametru -Noun.

PS C:\Users\Admin> Get-Command -Noun Computer

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Rename-Computer                                    7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Restart-Computer                                   7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Stop-Computer                                      7.0.0.0    Microsoft.PowerShell.Management

W odpowiedzi PowerShell wyświetlił dokładnie to o co prosiliśmy, czyli kilka poleceń z rzeczownikiem Computer. Zauważ, że w tym przypadku, są to polecenia wyłącznie zawierające dokładnie słowo Computer, ani litery więcej, ani litery mniej. Jeżeli jednak przed szukanym wyrazem dodamy znak wieloznaczny * to uzyskamy nieco inne wyniki:

PS C:\Users\Admin> Get-Command  -Noun *Computer

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-ADComputer                                     1.0.1.0    ActiveDirectory
Cmdlet          New-ADComputer                                     1.0.1.0    ActiveDirectory
Cmdlet          Remove-ADComputer                                  1.0.1.0    ActiveDirectory
Cmdlet          Rename-Computer                                    7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Restart-Computer                                   7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Set-ADComputer                                     1.0.1.0    ActiveDirectory
Cmdlet          Stop-Computer                                      7.0.0.0    Microsoft.PowerShell.Management

Idąc dalej tym tropem można wstawić symbol wieloznaczny również na końcu wyrazu:

PS C:\Users\Admin> Get-Command  -Noun *Computer*

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Get-MpComputerStatus                               1.0        ConfigDefender
Function        Get-MpComputerStatus                               1.0        Defender
Cmdlet          Add-ADComputerServiceAccount                       1.0.1.0    ActiveDirectory
Cmdlet          Get-ADComputer                                     1.0.1.0    ActiveDirectory
Cmdlet          Get-ADComputerServiceAccount                       1.0.1.0    ActiveDirectory
Cmdlet          Get-AzComputeResourceSku                           6.3.0      Az.Compute
Cmdlet          Get-ComputerInfo                                   7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          New-ADComputer                                     1.0.1.0    ActiveDirectory
Cmdlet          New-AzOperationalInsightsComputerGroup             3.2.0      Az.OperationalInsights
Cmdlet          Remove-ADComputer                                  1.0.1.0    ActiveDirectory
Cmdlet          Remove-ADComputerServiceAccount                    1.0.1.0    ActiveDirectory
Cmdlet          Rename-Computer                                    7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Restart-Computer                                   7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Set-ADComputer                                     1.0.1.0    ActiveDirectory
Cmdlet          Set-LapsADComputerSelfPermission                   1.0.0.0    LAPS
Cmdlet          Stop-Computer                                      7.0.0.0    Microsoft.PowerShell.Management

Tym razem PowerShell wylistował nam wszystkie polecenia, które jako rzeczownik posiadają słowo Computer, niezależnie od tego, co jest przed i po nim. Dzięki temu wyszukiwanie nie obejmuje tylko poleceń, które bazujują na nazwie Computer, ale także te, które mają dodatkowe przedrostki lub przyrostki, rozszerzając zakres wyników. Tutaj kłaniają sie trochę podstawy regex, gdyż w zależności od tego jak skonstruujemy zapytanie takie wyniki otrzymamy.

# Ćwiczenie 4 – wylistuj wszystkie polecenia, które mają w nazwie czasownik „Uninstall”

Kolejne ćwiczenie jest bardzo podobne do porzedniego, tym razem chodzi jednak o czasownik, zatem parametr -Noun zamieniamy na -Verb. I zgodnie z poleceniem szukamy czasownika Uninstall.

PS C:\Users\Admin> Get-Command -Verb Uninstall

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Uninstall-Dtc                                      1.0.0.0    MsDtc
Function        Uninstall-Module                                   2.2.5      PowerShellGet
Function        Uninstall-Script                                   2.2.5      PowerShellGet
Cmdlet          Uninstall-ADServiceAccount                         1.0.1.0    ActiveDirectory
Cmdlet          Uninstall-AzureRm                                  2.13.0     Az.Accounts
Cmdlet          Uninstall-Language                                 1.0        LanguagePackManagement
Cmdlet          Uninstall-Package                                  1.4.8.1    PackageManagement
Cmdlet          Uninstall-ProvisioningPackage                      3.0        Provisioning
Cmdlet          Uninstall-PSResource                               1.0.4.1    Microsoft.PowerShell.PSResourceGet
Cmdlet          Uninstall-TrustedProvisioningCertificate           3.0        Provisioning
Cmdlet          Uninstall-WindowsFeature                           2.0.0.0    ServerManager

Oczywiście nic nie stoi na przeszkodzie, aby zmodyfikować nieco zapytanie i skorzystać przykładowo z parametru -Name oraz znaku wieloznacznego *:

PS C:\Users\Admin> Get-Command –Name Uninstall-*

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Uninstall-Dtc                                      1.0.0.0    MsDtc
Function        Uninstall-Module                                   2.2.5      PowerShellGet
Function        Uninstall-Script                                   2.2.5      PowerShellGet
Cmdlet          Uninstall-ADServiceAccount                         1.0.1.0    ActiveDirectory
Cmdlet          Uninstall-AzureRm                                  2.13.0     Az.Accounts
Cmdlet          Uninstall-Language                                 1.0        LanguagePackManagement
Cmdlet          Uninstall-Package                                  1.4.8.1    PackageManagement
Cmdlet          Uninstall-ProvisioningPackage                      3.0        Provisioning
Cmdlet          Uninstall-PSResource                               1.0.4.1    Microsoft.PowerShell.PSResourceGet
Cmdlet          Uninstall-TrustedProvisioningCertificate           3.0        Provisioning
Cmdlet          Uninstall-WindowsFeature                           2.0.0.0    ServerManager

Jak możesz zauważyć wynik polecenia identyczny, chociaż skorzystaliśmy z dwóch nieco odmiennych metod. I tutaj właśnie dobry przykład tego, że w PowerShellu każde zadanie można wykonać na conajmniej kilka dziesiąt róznych sposobów.

Generalnie jeżeli chodzi o czasowniki to sprawa wydaje się być stosunkowo prosta, gdyż przynajmniej domyślnie istnieje pewna „gotowa” lista, którą można podejrzeć za pomocą Get-Verb. Jeżeli wykonasz to polecenie w swojej konsli PowerShell to ujrzysz prawie 100 oficjalnie zaaprobowanych czasowników, których użycie rekomendowane jest również przy tworzeniu swoich funkcji.

Warto wiedzieć

Generalnie jeżeli chodzi o czasowniki to sprawa wydaje się być stosunkowo prosta, gdyż przynajmniej domyślnie istnieje pewna „gotowa” lista, którą można podejrzeć za pomocą Get-Verb. Jeżeli wykonasz to polecenie w swojej konsli PowerShell to ujrzysz prawie 100 oficjalnie zaaprobowanych czasowników, których użycie rekomendowane jest również przy tworzeniu swoich funkcji.

# Ćwiczenie 5 – wylistuj wszystkie polecenia, które posiadają w nazwie „tcp”

Kolejne ćwiczenie to wyszukanie poleceń, które zawierają konkretny wyraz czy też zlepek liter. Tym razem parametrem będzie Name czyli zapytanie będzie dotyczyło całej nazwy, nie konkretengo rzeczownika czy czasownika. W najprostrzej formie może to wyglądać następująco. Get-Command -Name tcp. Czyli szukamy ciągu znaków w dowolnym miejscu. Jeżeli zlikwiduję 1 gwiazdkę to otrzymam tylko 1 wynik, gdyż zgodnie z zapytaniem szukam poleceń, które zaczynają się od tcp.

PS C:\Users\Admin> Get-Command -Name *tcp*

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Get-NetTCPConnection                               1.0.0.0    NetTCPIP
Function        Get-NetTCPSetting                                  1.0.0.0    NetTCPIP
Function        Set-NetTCPSetting                                  1.0.0.0    NetTCPIP
Application     inetcpl.cpl                                        11.0.2610… C:\WINDOWS\system32\inetcpl.cpl
Application     TCPSVCS.EXE                                        10.0.2610… C:\WINDOWS\system32\TCPSVCS.EXE

# Ćwiczenie 6 – wylistuj wszystkie polecenia, które posiadają parametr „ComputerName”

Kolejne ćwiczenie dotyczy nie tyle samych poleceń co ich parametrów. Czasami potrzebujemy sprawdzić jakie polecenia posiadają konkretny parametr, np. Właśnie ComputerName, który zwykle służy do pracy zdalnej. Zobaczmy zatem jakie polecenia posiadają ten parametr, w tym celu znów Get-Command i parametr –ParameterName.

PS C:\Users\Admin> Get-Command -ParameterName ComputerName

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Connect-PSSession                                  7.4.6.500  Microsoft.PowerShell.Core
Cmdlet          Enter-PSSession                                    7.4.6.500  Microsoft.PowerShell.Core
Cmdlet          Get-HotFix                                         7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Get-PSSession                                      7.4.6.500  Microsoft.PowerShell.Core
Cmdlet          Invoke-Command                                     7.4.6.500  Microsoft.PowerShell.Core
Cmdlet          New-PSSession                                      7.4.6.500  Microsoft.PowerShell.Core
Cmdlet          Receive-Job                                        7.4.6.500  Microsoft.PowerShell.Core
Cmdlet          Receive-PSSession                                  7.4.6.500  Microsoft.PowerShell.Core
Cmdlet          Remove-PSSession                                   7.4.6.500  Microsoft.PowerShell.Core
Cmdlet          Rename-Computer                                    7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Restart-Computer                                   7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Send-MailMessage                                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Stop-Computer                                      7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Test-Connection                                    7.0.0.0    Microsoft.PowerShell.Management

Jak widzisz poleceń takich jest całkiem sporo.

# Ćwiczenie 7 – wylistuj wszystkie polecenia z modułu „NetAdapter”

Kolejne ćwiczenie to wylistowanie poleceń z modułu. Zainstalowałeś nowy moduł i chcesz zobaczyć co wchodzi w jego skład. Standardowo Get-Command i tym razem parametr –Module i przykładowo NetAdapter.

PS C:\Users\Admin> get-Command -Module NetTCPIp

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Find-NetRoute                                      1.0.0.0    nettcpip
Function        Get-NetCompartment                                 1.0.0.0    nettcpip
Function        Get-NetIPAddress                                   1.0.0.0    nettcpip
Function        Get-NetIPConfiguration                             1.0.0.0    nettcpip
Function        Get-NetIPInterface                                 1.0.0.0    nettcpip
Function        Get-NetIPv4Protocol                                1.0.0.0    nettcpip
Function        Get-NetIPv6Protocol                                1.0.0.0    nettcpip
Function        Get-NetNeighbor                                    1.0.0.0    nettcpip
Function        Get-NetOffloadGlobalSetting                        1.0.0.0    nettcpip
Function        Get-NetPrefixPolicy                                1.0.0.0    nettcpip
Function        Get-NetRoute                                       1.0.0.0    nettcpip
Function        Get-NetTCPConnection                               1.0.0.0    nettcpip
Function        Get-NetTCPSetting                                  1.0.0.0    nettcpip
Function        Get-NetTransportFilter                             1.0.0.0    nettcpip
Function        Get-NetUDPEndpoint                                 1.0.0.0    nettcpip
Function        Get-NetUDPSetting                                  1.0.0.0    nettcpip
Function        New-NetIPAddress                                   1.0.0.0    nettcpip
Function        New-NetNeighbor                                    1.0.0.0    nettcpip
Function        New-NetRoute                                       1.0.0.0    nettcpip
Function        New-NetTransportFilter                             1.0.0.0    nettcpip
Function        Remove-NetIPAddress                                1.0.0.0    nettcpip
Function        Remove-NetNeighbor                                 1.0.0.0    nettcpip
Function        Remove-NetRoute                                    1.0.0.0    nettcpip
Function        Remove-NetTransportFilter                          1.0.0.0    nettcpip
Function        Set-NetIPAddress                                   1.0.0.0    nettcpip
Function        Set-NetIPInterface                                 1.0.0.0    nettcpip
Function        Set-NetIPv4Protocol                                1.0.0.0    nettcpip
Function        Set-NetIPv6Protocol                                1.0.0.0    nettcpip
Function        Set-NetNeighbor                                    1.0.0.0    nettcpip
Function        Set-NetOffloadGlobalSetting                        1.0.0.0    nettcpip
Function        Set-NetRoute                                       1.0.0.0    nettcpip
Function        Set-NetTCPSetting                                  1.0.0.0    nettcpip
Function        Set-NetUDPSetting                                  1.0.0.0    nettcpip
Function        Test-NetConnection                                 1.0.0.0    nettcpip

No i widzimy wszystkie polecenia, które wchodzą w skład modułu NetAdapter. No dobrze, ale skąd w ogóle dowiedzieć się jakie moduły są w PowerShellu. Oczywiście należy skorzystać z odpowiedniego cmdletu. W tym wypadku będzie to Get-Module, który pokazuje aktualnie załadowane moduły. O samych modułach będzie nieco więcej w którejść z kolejnych części.

# Ćwiczenie 8 – znajdź polecenie w repozytorium PSGallery

Kolejne ćwiczenie polega na znalezieniu polecenia w zewnętrznym repozytorium online. Jak myślisz, którego cmdletu użyjemy? Prawdopodobnie pomyślałeś o Get-Command, ale muszę Cię rozczarować. Tym razem wyjątkowo skorzystamy z Find-Command. Get-Command jest odpowiedni tylko dla lokalnych poleceń. Przejdźmy więc do wyszukiwania poleceń z modułu MicrosoftTeams, jednak aby ograniczyć liczbę wyników, skupimy się tylko na 10 pierwszych pozycjach.

PS C:\Users\Admin> Find-Command -Repository PSGallery -ModuleName MicrosoftTeams | select -First 10

Name                                Version    ModuleName                          Repository
----                                -------    ----------                          ----------
Add-TeamChannelUser                 6.8.0      MicrosoftTeams                      PSGallery
Add-TeamUser                        6.8.0      MicrosoftTeams                      PSGallery
Connect-MicrosoftTeams              6.8.0      MicrosoftTeams                      PSGallery
Disconnect-MicrosoftTeams           6.8.0      MicrosoftTeams                      PSGallery
Set-TeamsEnvironmentConfig          6.8.0      MicrosoftTeams                      PSGallery
Clear-TeamsEnvironmentConfig        6.8.0      MicrosoftTeams                      PSGallery
Get-AssociatedTeam                  6.8.0      MicrosoftTeams                      PSGallery
Get-MultiGeoRegion                  6.8.0      MicrosoftTeams                      PSGallery
Get-Operation                       6.8.0      MicrosoftTeams                      PSGallery
Get-SharedWithTeam                  6.8.0      MicrosoftTeams                      PSGallery

Może się zdarzyć, że przy pierwszym użyciu tego cmdletu konsola poprosi o update modułu odpowiedzialnego za pakiety.

# Ćwiczenie 9 – wyświetl informacje o cmdletcie „Get-ChildItem”

Wszystkie kluczowe rodzaje wyszukiwań mamy już za sobą. Teraz pora odkryć inne zastosowanie cmdletu Get-Command. Jeżeli użyjemy go w połączeniu z przetwarzaniem potokowym, cmdletem Select-Object i znakiem wieloznacznym, uzyskamy obszerny zestaw informacji na temat konkretnego polecenia w tym przykładzie Get-ChildItem. Warto przyjrzeć się temu uważnie:

PS C:\Users\Admin> Get-Command Get-ChildItem | Select-Object *

HelpUri             : https://go.microsoft.com/fwlink/?LinkID=2096492
DLL                 : C:\Program Files\PowerShell\7\Microsoft.PowerShell.Commands.Management.dll
Verb                : Get
Noun                : ChildItem
HelpFile            : Microsoft.PowerShell.Commands.Management.dll-Help.xml
PSSnapIn            :
Version             : 7.0.0.0
ImplementingType    : Microsoft.PowerShell.Commands.GetChildItemCommand
Definition          :
                      Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [-Include <string[]>] [-Exclude <string[]
                      >] [-Recurse] [-Depth <uint>] [-Force] [-Name] [-Attributes <FlagsExpression[FileAttributes]>] [-
                      FollowSymlink] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]

                      Get-ChildItem [[-Filter] <string>] -LiteralPath <string[]> [-Include <string[]>] [-Exclude <strin
                      g[]>] [-Recurse] [-Depth <uint>] [-Force] [-Name] [-Attributes <FlagsExpression[FileAttributes]>]
                       [-FollowSymlink] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]

DefaultParameterSet : Items
OutputType          : {System.IO.FileInfo, System.IO.DirectoryInfo}
Options             : ReadOnly
Name                : Get-ChildItem
CommandType         : Cmdlet
Source              : Microsoft.PowerShell.Management
Visibility          : Public
ModuleName          : Microsoft.PowerShell.Management
Module              : Microsoft.PowerShell.Management
RemotingCapability  : PowerShell
Parameters          : {[Path, System.Management.Automation.ParameterMetadata], [LiteralPath, System.Management.Automati
                      on.ParameterMetadata], [Filter, System.Management.Automation.ParameterMetadata], [Include, System
                      .Management.Automation.ParameterMetadata]…}
ParameterSets       : {[[-Path] <string[]>] [[-Filter] <string>] [-Include <string[]>] [-Exclude <string[]>] [-Recurse]
                       [-Depth <uint>] [-Force] [-Name] [-Attributes <FlagsExpression[FileAttributes]>] [-FollowSymlink
                      ] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>], [[-Filter] <string>]
                       -LiteralPath <string[]> [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Depth <uint>] [
                      -Force] [-Name] [-Attributes <FlagsExpression[FileAttributes]>] [-FollowSymlink] [-Directory] [-F
                      ile] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]}

# Ćwiczenie 10 – wyświetl informacje o cmdlecie „Get-Process” w interaktywnym oknie

Chociaż PowerShell zazwyczaj kojarzy się z surowym, tekstowym interfejsem to musisz wiedzieć, że potrafi też wyświetlać graficzne okna. Co więcej istnieje nie jeden, a nawet kilka cmdletów, które pozwalają na bardziej wizualne podejście do zarządzania systemem. W tym ćwiczeniu wykorzystamy Show-Command, aby wyświetlić interaktywne okno dla cmdletu Get-Process. Dzięki temu zamiast wpisywać parametry ręcznie, możemy zobaczyć wszystkie dostępne opcje w wygodnym, graficznym interfejsie.

Kiedy warto skorzystać z Show-Command?

  • w celu ułatwienia nauki cmdletów, wyświetlając dostępne parametry w przystępny sposób.
  • to również świetne rozwiązanie dla początkujących, którzy jeszcze nie czują się pewnie w składni PowerShell.
  • można go używać do szybkiego sprawdzenia dostępnych opcji bez konieczności wertowania dokumentacji.

Uwaga: Show-Command działa tylko w systemie Windows i nie jest dostępny w wersjach PowerShell dla macOS i Linuxa.

Show-Command Get-Process

Po wybraniu konkretnych parametrów i podaniu wartości można albo skopiować całe polecenie do schowka, albo bezpośrednio je uruchomić. Jeżeli natomiast wywołasz cmdlet Show-Command domyślnie, czyli bez żadnych dodatkowych atrybutów to uruchomi się okno pozwalające na przeglądanie zawartości modułów i poleceń.

Tyle na dziś. Jeżeli masz jakieś ciekawe informacje w tym temacie to podziel się w komentarzach.

Jeżeli uważasz, że dobrze wykonaliśmy swoją robotę i dowiedziałeś się czegoś nowego to postaw nam wirtualną kawę.

Postaw mi kawę na buycoffee.to

Darmowy Ebook

Podziel się

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *