it-swarm.com.de

Wie wird der Wert eines Objekts nach Eigenschaftsname in PowerShell ermittelt?

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"?

89
KFL

Sicher 

write-Host ($obj | Select -ExpandProperty "SomeProp")

Oder für diese Sache:

$obj."SomeProp"
140
aquinas

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!

34
JustaDaKaje

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

https://technet.Microsoft.com/de-de/library/hh849895.aspx

[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name
armsvc

PowershellVariablen

16
Charlie Joynt

Versuche dies :

$obj = @{
    SomeProp = "Hello"
}

Write-Host "Property Value is $($obj."SomeProp")"
3
rainman-63
$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
0
dhanoa

Hier ist eine alternative Methode, um den Eigenschaftswert eines Objekts abzurufen:

write-Host $(get-something).SomeProp
0
Duncan Clay