2013-01-18 15 views
68

PowerShell'de, adını (bir dize) belirterek bir nesnenin özellik değerini nasıl elde edersiniz? Benzer bir şeyBir nesnenin mülkün değeri PowerShell'deki özellik adına nasıl alınır?

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

var mı PowerShell içinde "-PropertyByName al": Ne Aşağıdaki gibi bir şey ister misin?

cevap

110

Tabii

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

Veya bu konuda

:

$obj."SomeProp" 
+7

Genişletmeyi hatırla: 'değerini seç - 'SomeProp'' değerini seç. ' "SomeProp" seçeneğini' 'yazma-host' içinde' bir özellik "SomeProp" ile customobject döndürür, sonra da '$ obj kullanmak için bir yolu var mı. "SomeProp" hemen hemen geri adım 1. –

+2

yazılı? –

+0

@TheMuffinMan, evet, genel olarak yazılabilir bir özelliktir. $ $ "$ Somepropertyname" –

24

@aquinas üzerine Genişleyen:

Get-something | select -ExpandProperty PropertyName 

veya

Get-something | select -expand PropertyName 

veya

Get-something | select -exp PropertyName 

Sadece bir bilgi parçası elde etmek için bir tek hat komutu arıyor olabilir olanlar için bu önerileri yaptı ve gerçek dünya örneği yer alır istedi. PowerShell üzerinden Office 365 altına alınmasında

, burada "BookInPolicy" listesine eklenmişti kullanıcıların/grupların tüm elde etmek için kullanılan bir örnekti: Sadece "BookInPolicy Seç" oldu kullanılarak

Get-CalendarProcessing [email protected] | Select -expand BookInPolicy 

Birkaç üyeyi kesip, bu bilgi için teşekkür ederim!

2

bu deneyin:

$obj = @{ 
    SomeProp = "Hello" 
} 

Write-Host "Property Value is $($obj."SomeProp")" 
+0

StackOverflow'a hoş geldiniz, lütfen sorunuzu düzenleyin ve açıklayın * neden * bunu denemeli ve * neden * mevcut cevaplar. –

8

Sen Select-Object cmdlet'ini kullanarak ve ilgilendiğiniz özellik adı (ler) belirterek adıyla bir özelliği alabilirsiniz bu basitçe geri dönüşü yok unutmayın. bu özellik için ham değer; bunun yerine hala bir nesne gibi davranan bir şey elde edersiniz.

[PS]> $property.Name 
armsvc 

[PS]> $property -eq "armsvc" 
False 

[PS]> $property.Name -eq "armsvc" 
True 

[PS]> $property.Name.GetType().FullName 
System.String 

diğer cevaplar gereğince:

o özellik için değerini kullanmak için
[PS]> $property = (Get-Process)[0] | Select-Object -Property Name 

[PS]> $property 

Name 
---- 
armsvc 

[PS]> $property.GetType().FullName 
System.Management.Automation.PSCustomObject 

, hala sadece bir özellik olsa bile, sen sonra hangi özelliği tanımlamak gerekecektir Burada, bir dize içinde tek bir özelliği kullanmak isterseniz, ifadeyi dinamik olarak dizeye eklenecek bir değişken olarak bildirmek için ifadeyi (parantezlerin etrafına) ve önekin bir dolar işareti ($) ile değerlendirmeniz gerekir:

[PS]> "The first process in the list is: $($property.Name)" 
The first process in the list is: armsvc 

Doğru olarak, diğerleri, Select-Object cmdlet'ini -ExpandProperty parametresini önererek bu soruyu yanıtladı. Bu, belirtilen özelliklerin değerini döndürerek bazı baş ağrısını atlar, ancak farklı senaryolarda farklı yaklaşımlar kullanmak isteyeceksiniz.-ExpandProperty <String>

seçmek için bir özellik belirtir ve bir girişim o, tesisi

https://technet.microsoft.com/en-us/library/hh849895.aspx

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

genişletmek için yapılması gerektiğini belirtir
0
$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

$ dizi = @ ("Jind", 12 "Singh") yazma ana $ dizi [1] salt konakçı $ dizi + = "Rıza" yazma ana $ dizi [3] salt konakçı yazma ana $ dizi [$ arr.length-1] salt konakçı $ dizi = $ dizi -Ne $ dizi [1] yazma ana $ dizi salt konakçı foreach ($ arr $ ı) {write-host $ i} – dhanoa

İlgili konular