About Properties

  • 12/01/2017
  • 5 minut na przeczytanie
    • S
    • .

    • s
    • q

Krótki opis

Opisuje, jak korzystać z właściwości obiektów w PowerShell.

Długi opis

PowerShell używa ustrukturyzowanych kolekcji informacji zwanych obiektami do reprezentowania elementów w magazynach danych lub stanu komputera. Zazwyczaj pracuje się z obiektami, które są częścią Microsoft .NET Framework, ale można również tworzyć własne obiekty w PowerShell.

Powiązanie między elementem a jego obiektem jest bardzo ścisłe. Kiedy zmieniasz obiekt, zazwyczaj zmieniasz element, który on reprezentuje. Na przykład, gdy pobierasz plik w PowerShell, nie otrzymujesz rzeczywistego pliku. Zamiast tego dostajesz obiekt FileInfo, który reprezentuje ten plik. Kiedy zmieniasz obiekt FileInfo, plik również się zmienia.

Większość obiektów ma właściwości. Właściwości są danymi, które są związane z obiektem. Różne typy obiektów mają różne właściwości. Na przykład obiekt FileInfo, który reprezentuje plik, ma właściwość IsReadOnly, która zawiera $True, jeśli plik ma atrybut tylko do odczytu i $False, jeśli nie ma. Obiekt DirectoryInfo, który reprezentuje katalog systemu plików, ma właściwość Parent, która zawiera ścieżkę do katalogu nadrzędnego.

Właściwości obiektów

Aby uzyskać właściwości obiektu, użyj cmdletu Get-Member. Na przykład, aby uzyskać właściwości obiektu FileInfo, użyj polecenia Get-ChildItem cmdletto get the FileInfo object that represents a file. Następnie użyj operatora potoku (|), aby wysłać obiekt FileInfo do Get-Member. Poniższe polecenie pobiera plik PowerShell.exe i wysyła go do Get-Member.Zmienna automatyczna $Pshome zawiera ścieżkę katalogu instalacji PowerShellinstall.

Get-ChildItem $pshome\PowerShell.exe | Get-Member

Wyjście polecenia zawiera listę członków obiektu FileInfo.Członkowie obejmują zarówno właściwości, jak i metody. Kiedy pracujesz w PowerShell, masz dostęp do wszystkich członków obiektów.

Aby uzyskać tylko właściwości obiektu, a nie metody, użyj parametruMemberType polecenia Get-Member cmdlet z wartością „property”, jak pokazano w poniższym przykładzie.

Get-ChildItem $pshome\PowerShell.exe | Get-Member -MemberType property
TypeName: System.IO.FileInfoName MemberType Definition---- ---------- ----------Attributes Property System.IO.FileAttributes Attributes {get;set;}CreationTime Property System.DateTime CreationTime {get;set;}CreationTimeUtc Property System.DateTime CreationTimeUtc {get;set;}Directory Property System.IO.DirectoryInfo Directory {get;}DirectoryName Property System.String DirectoryName {get;}Exists Property System.Boolean Exists {get;}Extension Property System.String Extension {get;}FullName Property System.String FullName {get;}IsReadOnly Property System.Boolean IsReadOnly {get;set;}LastAccessTime Property System.DateTime LastAccessTime {get;set;}LastAccessTimeUtc Property System.DateTime LastAccessTimeUtc {get;set;}LastWriteTime Property System.DateTime LastWriteTime {get;set;}LastWriteTimeUtc Property System.DateTime LastWriteTimeUtc {get;set;}Length Property System.Int64 Length {get;}Name Property System.String Name {get;}

Po znalezieniu właściwości można ich użyć w poleceniach PowerShell.

Wartości właściwości

Ale każdy obiekt określonego typu ma te same właściwości, wartości tych właściwości opisują konkretny obiekt. Na przykład, każdy obiektFileInfo ma właściwość CreationTime, ale wartość tej właściwości różni się dla każdego pliku.

Najpopularniejszym sposobem uzyskania wartości właściwości obiektu jest użycie metody kropki. Wpisz odwołanie do obiektu, takie jak zmienna, która zawiera obiekt, lub polecenie, które pobiera obiekt. Następnie wpisz kropkę (.)po której następuje nazwa właściwości.

Na przykład, poniższe polecenie wyświetla wartość właściwości CreationTimeproperty pliku PowerShell.exe. Polecenie Get-ChildItem zwraca obiektFileInfo, który reprezentuje plik PowerShell.exe. Polecenie jest ujęte w nawiasy, aby upewnić się, że jest wykonywane przed dostępem do jakichkolwiek właściwości. Po poleceniu Get-ChildItem występuje kropka i nazwa właściwości CreationTime, jak poniżej:

(Get-ChildItem $pshome\PowerShell.exe).creationtime
Tuesday, March 18, 2008 12:07:52 AM

Można również zapisać obiekt w zmiennej, a następnie uzyskać jego właściwości za pomocą metody kropki, jak pokazano w poniższym przykładzie:

$a = Get-ChildItem $pshome\PowerShell.exe$a.CreationTime
Tuesday, March 18, 2008 12:07:52 AM

Można również użyć poleceń cmdlet Select-Object i Format-List do wyświetlenia wartości właściwości obiektu. Polecenia Select-Object i Format-List mają parametr Property. Można użyć parametru Property, aby określić jedną lub więcej właściwości i ich wartości. Można też użyć znaku wieloznacznego(*) do reprezentowania wszystkich właściwości.

Na przykład poniższe polecenie wyświetla wartości wszystkich właściwości pliku PowerShell.exe.

Get-ChildItem $pshome\PowerShell.exe | Format-List -Property *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3 2\WindowsPowerShell\v1.0\PowerShell.exePSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3 2\WindowsPowerShell\v1.0PSChildName : PowerShell.exePSDrive : CPSProvider : Microsoft.PowerShell.Core\FileSystemPSIsContainer : FalseMode : -a----VersionInfo : File: C:\Windows\System32\WindowsPowerShell\ v1.0\PowerShell.exe InternalName: POWERSHELL OriginalFilename: PowerShell.EXE.MUI FileVersion: 10.0.16299.15 (WinBuild.160101.0800) FileDescription: Windows PowerShell Product: Microsoft Windows Operating System ProductVersion: 10.0.16299.15 Debug: False Patched: False PreRelease: False PrivateBuild: False SpecialBuild: False Language: English (United States)BaseName : PowerShellTarget : {C:\Windows\WinSxS\amd64_microsoft-windows-powershell-ex e_31bf3856ad364e35_10.0.16299.15_none_8c022aa6735716ae\p owershell.exe}LinkType : HardLinkName : PowerShell.exeLength : 449024DirectoryName : C:\Windows\System32\WindowsPowerShell\v1.0Directory : C:\Windows\System32\WindowsPowerShell\v1.0IsReadOnly : FalseExists : TrueFullName : C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exExtension : .exeCreationTime : 9/29/2017 6:43:19 AMCreationTimeUtc : 9/29/2017 1:43:19 PMLastAccessTime : 9/29/2017 6:43:19 AMLastAccessTimeUtc : 9/29/2017 1:43:19 PMLastWriteTime : 9/29/2017 6:43:19 AMLastWriteTimeUtc : 9/29/2017 1:43:19 PMAttributes : Archive

Właściwości statyczne

W PowerShell można używać właściwości statycznych klas .NET. Właściwości statyczne są właściwościami klasy, w przeciwieństwie do właściwości standardowych, które są właściwościami obiektu.

Aby uzyskać właściwości statyczne klasy, należy użyć parametru Static polecenia cmdletGet-Member.

Na przykład poniższe polecenie pobiera właściwości statyczne klasySystem.DateTime.

Get-Date | Get-Member -MemberType Property -Static
TypeName: System.DateTimeName MemberType Definition---- ---------- ----------MaxValue Property static datetime MaxValue {get;}MinValue Property static datetime MinValue {get;}Now Property datetime Now {get;}Today Property datetime Today {get;}UtcNow Property datetime UtcNow {get;}

Aby uzyskać wartość właściwości statycznej, należy użyć następującej składni.

::<Property>

Na przykład poniższe polecenie pobiera wartość właściwości statycznej UtcNow klasy System.DateTime.

::UtcNow

Właściwości obiektów skalarnych i kolekcji

Właściwości jednego („skalarnego”) obiektu danego typu są często różne od właściwości kolekcji obiektów tego samego typu.na przykład, każda usługa ma właściwość DisplayName, ale kolekcja usług nie ma właściwości DisplayName.

Następujące polecenie pobiera wartość właściwości DisplayName usługi 'Audiosrv’.

(Get-Service Audiosrv).DisplayName
Windows Audio

Począwszy od PowerShell 3.0, PowerShell stara się zapobiegać błędom skryptowym, które wynikają z różnych właściwości obiektów skalarnych i kolekcji. To samo polecenie zwraca wartość właściwości DisplayName każdej usługi, którą zwraca Get-Service.

(Get-Service).DisplayName
Application ExperienceApplication Layer Gateway ServiceWindows All-User Install AgentApplication IdentityApplication Information...

Gdy przekazujesz kolekcję, ale żądasz właściwości, która istnieje tylko dla pojedynczych („skalarnych”) obiektów, PowerShell zwraca wartość tej właściwości dla każdego obiektu w kolekcji.

Wszystkie kolekcje mają właściwość Count, która zwraca liczbę obiektów w kolekcji.

(Get-Service).Count
176

Począwszy od PowerShell 3.0, jeśli zażądasz właściwości Count lub Length dla zerowej liczby obiektów lub jednego obiektu, PowerShell zwróci poprawną wartość.

(Get-Service Audiosrv).Count
1

Jeśli właściwość istnieje dla pojedynczych obiektów i dla kolekcji, zwracana jest tylko właściwość kolekcji.

$collection = @(@{length = "foo"}@{length = "bar"})# PowerShell returns the collection's Length.$collection.length

Właściwość kolekcji jest zwracana.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.