Über Eigenschaften

  • 12/01/2017
  • 5 Minuten zu lesen
    • S
    • s
    • q

Kurzbeschreibung

Beschreibt, wie man Objekteigenschaften in PowerShell verwendet.

Lange Beschreibung

PowerShell verwendet strukturierte Sammlungen von Informationen, die Objekte genannt werden, um die Elemente in Datenspeichern oder den Zustand des Computers darzustellen. Normalerweise arbeiten Sie mit Objekten, die Teil des Microsoft .NET Framework sind, aber Sie können auch benutzerdefinierte Objekte in PowerShell erstellen.

Die Zuordnung zwischen einem Element und seinem Objekt ist sehr eng. Wenn Sie ein Objekt ändern, ändern Sie normalerweise auch das Element, das es darstellt. Wenn Sie zum Beispiel eine Datei in PowerShell abrufen, erhalten Sie nicht die eigentliche Datei. Stattdessen erhalten Sie ein FileInfo-Objekt, das die Datei darstellt. Wenn Sie das FileInfo-Objekt ändern, ändert sich auch die Datei.

Die meisten Objekte haben Eigenschaften. Eigenschaften sind die Daten, die mit einem Objekt verbunden sind. Verschiedene Arten von Objekten haben unterschiedliche Eigenschaften. EinFileInfo-Objekt, das eine Datei darstellt, hat beispielsweise eine IsReadOnly-Eigenschaft, die $True enthält, wenn die Datei das Nur-Lese-Attribut hat, und $False, wenn dies nicht der Fall ist.Ein DirectoryInfo-Objekt, das ein Dateisystemverzeichnis darstellt, hat eine Parent-Eigenschaft, die den Pfad zum übergeordneten Verzeichnis enthält.

Objekteigenschaften

Um die Eigenschaften eines Objekts abzurufen, verwenden Sie das Cmdlet Get-Member. Um zum Beispiel die Eigenschaften eines FileInfo-Objekts abzurufen, verwenden Sie das Cmdlet Get-ChildItem, um das FileInfo-Objekt abzurufen, das eine Datei darstellt. Verwenden Sie dann einen Pipelineoperator (|), um das FileInfo-Objekt an Get-Member zu senden. Der folgende Befehl ruft die Datei „PowerShell.exe“ ab und sendet sie an Get-Member.Die automatische Variable „$Pshome“ enthält den Pfad des PowerShell-Installationsverzeichnisses.

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

Die Ausgabe des Befehls listet die Mitglieder des FileInfo-Objekts auf.Mitglieder umfassen sowohl Eigenschaften als auch Methoden. Wenn Sie in PowerShell arbeiten, haben Sie Zugriff auf alle Mitglieder der Objekte.

Um nur die Eigenschaften eines Objekts und nicht die Methoden abzurufen, verwenden Sie den ParameterMemberType des Cmdlets Get-Member mit dem Wert „property“, wie im folgenden Beispiel gezeigt.

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;}

Nachdem Sie die Eigenschaften gefunden haben, können Sie sie in Ihren PowerShell-Befehlen verwenden.

Eigenschaftswerte

Obwohl jedes Objekt eines bestimmten Typs die gleichen Eigenschaften hat, beschreiben die Werte dieser Eigenschaften das jeweilige Objekt. Zum Beispiel hat jedesFileInfo -Objekt eine CreationTime -Eigenschaft, aber der Wert dieser Eigenschaft unterscheidet sich für jede Datei.

Die gebräuchlichste Methode, um die Werte der Eigenschaften eines Objekts zu erhalten, ist die Dot-Methode. Geben Sie einen Verweis auf das Objekt ein, z. B. eine Variable, die das Objekt enthält, oder einen Befehl, der das Objekt abruft. Geben Sie dann einen Punkt (.) gefolgt von dem Eigenschaftsnamen ein.

Der folgende Befehl zeigt beispielsweise den Wert der Eigenschaft „CreationTime“ der Datei „PowerShell.exe“ an. Der Befehl Get-ChildItem gibt einFileInfo-Objekt zurück, das die Datei „PowerShell.exe“ darstellt. Der Befehl ist in Klammern eingeschlossen, um sicherzustellen, dass er ausgeführt wird, bevor auf Eigenschaften zugegriffen wird. Dem Befehl Get-ChildItem folgen ein Punkt und der Name der Eigenschaft CreationTime, wie folgt:

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

Sie können ein Objekt auch in einer Variablen speichern und dann seine Eigenschaften abrufen, indem Sie die Punktmethode verwenden, wie im folgenden Beispiel gezeigt:

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

Sie können auch die Cmdlets Select-Object und Format-List verwenden, um die Eigenschaftswerte eines Objekts anzuzeigen. Select-Object und Format-List verfügen jeweils über einenProperty -Parameter. Sie können mit dem Property-Parameter eine oder mehrere Eigenschaften und deren Werte angeben. Sie können auch das Platzhalterzeichen (*) verwenden, um alle Eigenschaften anzugeben.

Der folgende Befehl zeigt beispielsweise die Werte aller Eigenschaften der Datei PowerShell.exe an.

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

Statische Eigenschaften

Sie können die statischen Eigenschaften von .NET-Klassen in PowerShell verwenden. Statische Eigenschaften sind Eigenschaften einer Klasse, im Gegensatz zu Standardeigenschaften, die Eigenschaften eines Objekts sind.

Um die statischen Eigenschaften einer Klasse abzurufen, verwenden Sie den Static-Parameter des CmdletsGet-Member.

Beispielsweise ruft der folgende Befehl die statischen Eigenschaften der KlasseSystem.DateTime ab.

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;}

Um den Wert einer statischen Eigenschaft abzurufen, verwenden Sie die folgende Syntax.

::<Property>

Beispielsweise ruft der folgende Befehl den Wert der statischen Eigenschaft UtcNow der Klasse System.DateTime ab.

::UtcNow

Eigenschaften von skalaren Objekten und Sammlungen

Die Eigenschaften eines („skalaren“) Objekts eines bestimmten Typs unterscheiden sich oft von den Eigenschaften einer Sammlung von Objekten desselben Typs. z.B. hat jeder Dienst die Eigenschaft DisplayName, aber eine Sammlung von Diensten hat keine Eigenschaft DisplayName.

Der folgende Befehl ruft den Wert der DisplayName-Eigenschaft des Dienstes „Audiosrv“ ab.

(Get-Service Audiosrv).DisplayName
Windows Audio

Seit PowerShell 3.0 versucht PowerShell, Skriptfehler zu vermeiden, die aus den unterschiedlichen Eigenschaften von skalaren Objekten und Auflistungen resultieren. Derselbe Befehl gibt den Wert der DisplayName-Eigenschaft jedes Dienstes zurück, den Get-Service zurückgibt.

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

Wenn Sie eine Auflistung übermitteln, aber eine Eigenschaft anfordern, die nur bei einzelnen („skalaren“) Objekten vorhanden ist, gibt PowerShell den Wert dieser Eigenschaft für jedes Objekt in der Auflistung zurück.

Alle Auflistungen verfügen über eine Count-Eigenschaft, die zurückgibt, wie viele Objekte in der Auflistung enthalten sind.

(Get-Service).Count
176

Seit PowerShell 3.0 gibt PowerShell den korrekten Wert zurück, wenn Sie die Count- oder Length-Eigenschaft von null Objekten oder einem Objekt anfordern.

(Get-Service Audiosrv).Count
1

Wenn eine Eigenschaft für die einzelnen Objekte und für die Auflistung vorhanden ist, wird nur die Eigenschaft der Auflistung zurückgegeben.

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.