Was ist der Unterschied zwischen Variablen $a
und $b
?
$a = (Get-Date).DayOfWeek
$b = Get-Date | Select-Object DayOfWeek
Ich habe versucht zu überprüfen
$a.GetType
$b.GetType
MemberType : Method
OverloadDefinitions : {type GetType()}
TypeNameOfValue : System.Management.Automation.PSMethod
Value : type GetType()
Name : GetType
IsInstance : True
MemberType : Method
OverloadDefinitions : {type GetType()}
TypeNameOfValue : System.Management.Automation.PSMethod
Value : type GetType()
Name : GetType
IsInstance : True
Es scheint jedoch keinen Unterschied zu geben, obwohl die Ausgabe dieser Variablen unterschiedlich aussieht.
Zunächst fehlen Klammern, um GetType aufzurufen. Was Sie sehen, ist die MethodInfo, die die GetType-Methode in [DayOfWeek] beschreibt. Um GetType tatsächlich aufzurufen, sollten Sie Folgendes tun:
$a.GetType();
$b.GetType();
Sie sollten sehen, dass $a
Ein [DayOfWeek] und $b
Ein benutzerdefiniertes Objekt ist, das vom Cmdlet Select-Object generiert wird, um nur die DayOfWeek-Eigenschaft von Daten zu erfassen Objekt. Daher ist es nur ein Objekt mit einer DayOfWeek-Eigenschaft:
C:\> $b.DayOfWeek -eq $a
True
Select-Object erstellt ein neues psobject und kopiert die von Ihnen angeforderten Eigenschaften in dieses. Sie können dies mit GetType () überprüfen:
PS > $a.GetType().fullname
System.DayOfWeek
PS > $b.GetType().fullname
System.Management.Automation.PSCustomObject
Select-Object gibt ein benutzerdefiniertes PSObject mit nur den angegebenen Eigenschaften zurück. Selbst mit einer einzelnen Eigenschaft erhalten Sie nicht die Variable ACTUAL. Es ist in das PSObject eingebunden.
Tun Sie stattdessen Folgendes:
Get-Date | Select-Object -ExpandProperty DayOfWeek
So erhalten Sie das gleiche Ergebnis wie:
(Get-Date).DayOfWeek
Der Unterschied besteht darin, dass, wenn Get-Date mehrere Objekte zurückgibt, die Pipeline-Methode besser funktioniert als die Methode in Klammern, da (Get-ChildItem)
beispielsweise ein Array von ist Artikel. Dies hat sich in PowerShell v3 geändert und (Get-ChildItem).FullPath
Funktioniert wie erwartet und gibt nur ein Array mit den vollständigen Pfaden zurück.