Wie erhalten Sie in PowerShell den Eigenschaftswert eines Objekts, indem Sie dessen Namen (eine Zeichenfolge) angeben? Ich möchte etwas wie das Folgende:
$obj = get-something
# View the object's members:
$obj | gm
# I could retrieve a property by doing so:
write-Host $obj.SomeProp
# But for many purposes, I would really want to:
write-Host $obj | Get-PropertyByName "SomeProp"
Gibt es in PowerShell etwas Ähnliches wie "Get-PropertyByName"?
Sicher
write-Host ($obj | Select -ExpandProperty "SomeProp")
Oder für diese Sache:
$obj."SomeProp"
Erweiterung auf @aquinas:
Get-something | select -ExpandProperty PropertyName
oder
Get-something | select -expand PropertyName
oder
Get-something | select -exp PropertyName
Ich habe diese Vorschläge für diejenigen gemacht, die nur nach einem einzeiligen Befehl suchen, um Informationen zu erhalten, und wollten ein Beispiel aus der realen Welt aufnehmen.
Bei der Verwaltung von Office 365 über PowerShell wurde hier ein Beispiel verwendet, um alle Benutzer/Gruppen zu erhalten, die der Liste "BookInPolicy" hinzugefügt wurden:
Get-CalendarProcessing [email protected] | Select -expand BookInPolicy
Durch die Verwendung von "Select BookInPolicy" wurden mehrere Mitglieder abgeschnitten. Vielen Dank für diese Informationen!
Sie können ein property anhand des Namens mit dem Select-Object
-Cmdlet abrufen und den/die Eigenschaftennamen angeben, an denen Sie interessiert sind. Beachten Sie, dass dies nicht einfach den Rohwert dieser Eigenschaft zurückgibt. Stattdessen erhalten Sie etwas, das sich immer noch wie ein Objekt verhält.
[PS]> $property = (Get-Process)[0] | Select-Object -Property Name
[PS]> $property
Name
----
armsvc
[PS]> $property.GetType().FullName
System.Management.Automation.PSCustomObject
Um value für diese Eigenschaft verwenden zu können, müssen Sie dennoch ermitteln, nach welcher Eigenschaft Sie suchen, auch wenn es nur eine Eigenschaft gibt:
[PS]> $property.Name
armsvc
[PS]> $property -eq "armsvc"
False
[PS]> $property.Name -eq "armsvc"
True
[PS]> $property.Name.GetType().FullName
System.String
Wenn Sie eine einzelne Eigenschaft in einem String verwenden möchten, müssen Sie wie in den anderen Antworten hier den Ausdruck auswerten (in Klammern setzen) und ein Dollarzeichen ($) voranstellen, um den Ausdruck dynamisch als einzufügende Variable zu definieren in die Saite:
[PS]> "The first process in the list is: $($property.Name)"
The first process in the list is: armsvc
Richtig, andere haben diese Frage beantwortet, indem sie den -ExpandProperty
-Parameter für das Select-Object
-Cmdlet empfohlen haben. Dadurch werden einige der Kopfschmerzen umgangen, indem der Wert der angegebenen Eigenschaft zurückgegeben wird. In verschiedenen Szenarien sollten jedoch unterschiedliche Ansätze verwendet werden.
-ExpandProperty <String>
Gibt eine zu wählende Eigenschaft an und gibt an, dass ein Versuch erfolgen soll gemacht werden, um diese Eigenschaft zu erweitern
[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name
armsvc
Versuche dies :
$obj = @{
SomeProp = "Hello"
}
Write-Host "Property Value is $($obj."SomeProp")"
$com1 = new-object PSobject #Task1
$com2 = new-object PSobject #Task1
$com3 = new-object PSobject #Task1
$com1 | add-member noteproperty -name user -value jindpal #Task2
$com1 | add-member noteproperty -name code -value IT01 #Task2
$com1 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version} #Task3
$com2 | add-member noteproperty -name user -value singh #Task2
$com2 | add-member noteproperty -name code -value IT02 #Task2
$com2 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version} #Task3
$com3 | add-member noteproperty -name user -value dhanoa #Task2
$com3 | add-member noteproperty -name code -value IT03 #Task2
$com3 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version} #Task3
$arr += $com1, $com2, $com3 #Task4
write-Host "windows version of computer1 is: "$com1.ver() #Task3
write-Host "user name of computer1 is: "$com1.user #Task6
write-Host "code of computer1 is: "$com1,code #Task5
write-Host "windows version of computer2 is: "$com2.ver() #Task3
write-Host "user name of computer2 is: "$com2.user #Task6
write-Host "windows version of computer3 is: "$com3.ver() #Task3
write-Host "user name of computer3 is: "$com1.user #Task6
write-Host "code of computer3 is: "$com3,code #Task5
read-Host
Hier ist eine alternative Methode, um den Eigenschaftswert eines Objekts abzurufen:
write-Host $(get-something).SomeProp