e-ogloszenia.info

Etykiety

niedziela, 15 stycznia 2017

Wstęp do obiektów w PowerShell 5.0

Jak już miałem okazję wyjaśnić w artykule Wstęp do Windows PowerShell, Windows PowerShell 5.0 oparty jest na frameworku Microsoft .NET, co sprzyja ogromnym możliwościom programistycznym jeśli chodzi o pracę z obiektami. Dowiedzieliśmy się wówczas, między innymi, iż wynikami wykonywanych cmdletów nie są łańcuchy znaków, lecz obiekty.

Weźmy przykładowo cmdlet Get-ChildItem, który omówiłem wstępnie we wspomnianym wyżej artykule. Wywołując cmdlet Get-ChildItem, otrzymujemy listę elementów, które mogą być, w zależności od kontekstu, plikami i folderami, ale nie tylko. Te elementy są jednak zawsze obiektami, posiadającymi programistyczne właściwości i metody.

Zobaczmy, dla czystego przykładu, jakie właściwości i metody posiadają pliki zawarte w bieżącym katalogu oraz w jaki sposób można się do nich odwoływać:

PS C:\WINDOWS\system32> Get-ChildItem -File | gm -MemberType Property, Method | Format-Table Name, Membertype

W rezultacie wykonania powyższego polecenia, otrzymujemy listę obiektów, ich właściwości i metod:

Właściwości i metody obiektów w PowerShell 5.0
Właściwości i metody obiektów w PowerShell 5.0

Znając dostępne dla danego obiektu właściwości i metody, które zależne są od jego klasy, możemy z nich korzystać do konkretnych celów. Czysto przykładowo, korzystając z właściwości LastAccessTime, która jest dostępna dla obiektów klasy System.IO.FileInfo, możemy ograniczyć listę elementów zwracanych przez cmdlet Get-ChildItem do tych, których czas ostatniego dostępu jest późniejszy od daty 12/12/2016:

PS C:\Windows\system32> Get-ChildItem -File | where LastAccessTime -gt "12/12/2016"

W rezultacie wykonania powyższego polecenia, otrzymujemy:

Korzystanie z właściwości i metod obiektów w PowerShell 5.0
Korzystanie z właściwości i metod obiektów w PowerShell 5.0

Ten sam efekt można uzyskać korzystając z możliwości bezpośredniego odwoływania się do właściwości obiektów PowerShell. Jest na do sporo sposobów. Zademonstruję dwa z nich:

PS C:\WINDOWS\system32> ( gci -File ).where({$PSItem.LastAccessTime -gt "12/12/2016"});

PS C:\WINDOWS\system32> (gci).where( {!$_.psiscontainer -AND $_.LastAccessTime -gt "12/12/2016"} );

W Windows PowerShell 5.0 możemy jednak tworzyć własne obiekty i korzystać z ich specyficznych właściwości i metod. Zobaczmy teraz, prosty wstęp do pracy z własnymi obiektami:

Tworzenie obiektów w PowerShell 5.0
Tworzenie obiektów w PowerShell 5.0

Wyjaśniam zatem o co chodzi w powyższym przykładzie. Otóż utworzyłem obiekt klasy wscript.network, po czym przejrzałem jego metody i właściwości i zastosowałem jedną z nich aby zmapować przykładową lokalizację sieciową do litery dysku N:, po czym wyświetliłem zawartość dysku N:, a następnie zastosowałem odpowiednią metodę aby usunąć wcześniej utworzone mapowanie. Podobny efekt można uzyskać na wiele sposobów. Przykładowo, utworzenie obkiektu klasy wscript.network i mapowanie dysku sieciowego mogą być wykonane również w następujący sposób:
PS C:\Windows\System32> (New-Object -Com WScript.Network).MapNetworkDrive( "N:" , "\\SAMBA-SERVER1\Dom")

Innym prostym przykładem pracy z własnymi obiektami w PowerShell 5.0 może być obiekt klasy wscript.shell:

Tworzenie obiektów w PowerShell 5.0
Tworzenie obiektów w PowerShell 5.0

O co w tym chodzi? Otóż utworzyłem przykładowy obiekt klasy wscript, uzyskałem listę jego metod i właściwości, po czym zastosowałem metodę popup, co spowodowało pojawienie się okienka z uśmiechem.

Rzyczę miłej zabawy z obiektami w PowerShell 5.0 i zapraszam ponownie!

Brak komentarzy:

Prześlij komentarz

Dodaj komentarz