W PowerShell, jak uzyskać wartość właściwości obiektu, określając jego nazwę (ciąg znaków)? Chcę coś takiego:
$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"
Czy w PowerShell jest coś podobnego do „Get-PropertyByName”?
powershell
KFL
źródło
źródło
select -expand "SomeProp"
jeśli chcesz wartość.select "SomeProp"
zwraca obiekt niestandardowy z właściwością „SomeProp”, a następnie prawie wrócił do kroku 1.$obj."SomeProp"
wwrite-host
?$obj.($propName)
również działa. ($propName
przechowywane w obiekcie,$Headers.PropertyName
wymagane są nawiasy$obj.($Headers.PropertyName)
.Rozszerzanie @aquinas:
lub
lub
Przedstawiłem te sugestie dla tych, którzy mogą po prostu szukać jednowierszowego polecenia, aby uzyskać jakąś informację, i chciałem dołączyć przykład ze świata rzeczywistego.
W zarządzaniu Office 365 przez PowerShell, oto przykład, którego użyłem do uzyskania wszystkich użytkowników / grup, które zostały dodane do listy „BookInPolicy”:
Samo użycie „Select BookInPolicy” pozbawiło kilku członków, więc dziękuję za te informacje!
źródło
Możesz pobrać właściwość według nazwy za pomocą polecenia
Select-Object
cmdlet i określając nazwy właściwości, które Cię interesują. Należy pamiętać, że to nie zwraca po prostu wartości surowej dla tej właściwości; zamiast tego otrzymujesz coś, co nadal zachowuje się jak przedmiot.[PS]> $property = (Get-Process)[0] | Select-Object -Property Name [PS]> $property Name ---- armsvc [PS]> $property.GetType().FullName System.Management.Automation.PSCustomObject
Aby użyć wartości dla tej właściwości, nadal będziesz musiał określić, której właściwości szukasz, nawet jeśli istnieje tylko jedna właściwość:
[PS]> $property.Name armsvc [PS]> $property -eq "armsvc" False [PS]> $property.Name -eq "armsvc" True [PS]> $property.Name.GetType().FullName System.String
Podobnie jak w przypadku innych odpowiedzi tutaj, jeśli chcesz użyć pojedynczej właściwości w ciągu, musisz oszacować wyrażenie (umieścić wokół niego nawiasy) i przedrostek ze znakiem dolara ($), aby zadeklarować wyrażenie dynamicznie jako zmienną do wstawienia do ciągu:
[PS]> "The first process in the list is: $($property.Name)" The first process in the list is: armsvc
Całkiem poprawnie, inni odpowiedzieli na to pytanie, zalecając
-ExpandProperty
parametr dla poleceniaSelect-Object
cmdlet. To omija niektóre problemy, zwracając wartość określonej właściwości, ale będziesz chciał użyć różnych podejść w różnych scenariuszach.powershell zmienne
źródło
Spróbuj tego :
$obj = @{ SomeProp = "Hello" } Write-Host "Property Value is $($obj."SomeProp")"
źródło
The value of Prop is Value
a następnieThe value of NonexistentProp is
Oto alternatywny sposób uzyskania wartości właściwości obiektu:
źródło
$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
źródło