2013-01-18 15 views
68

PowerShellでは、名前(文字列)を指定してオブジェクトのプロパティ値を取得する方法を教えてください。私は次のような何かをしたい:PowerShellでオブジェクトのプロパティの値をプロパティ名で取得する方法は?

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

は、PowerShellのは、 "get-PropertyByName" に似たものはありますか?

答えて

110

確か

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

またはそのことについて

$obj."SomeProp" 
+7

覚えておいてください: 'select -expand" SomeProp "' '' SomeProp''を選択すると、プロパティー "SomeProp"を持つカスタムオブジェクトが返され、その後、彼はステップ1に戻ります。 –

+2

'$ obj。 'を使う方法は' write-host'にありますか? –

+0

@TheMuffinMan、はい、書き込みホスト$ objのように一般的に適用可能な機能です。 "$ somepropertyname" –

24

が@aquinas時に拡大:

Get-something | select -ExpandProperty PropertyName 

または

Get-something | select -expand PropertyName 

または

Get-something | select -exp PropertyName 

私は情報のいくつかの作品を得るために、1行のコマンドを探しているかもしれないもののためにこれらの提案を行い、実世界の例を含めるようにしたかったです。 PowerShellを経由してOffice 365の管理に

は、ここで私は「BookInPolicy」リストに追加されたユーザー/グループのすべてを取得するために使用される例だった:ちょうど「BookInPolicyを選択」して使用して

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

いくつかのメンバーを切断して、この情報をありがとう!

2

これを試してみてください:

$obj = @{ 
    SomeProp = "Hello" 
} 

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

StackOverflowへようこそ、あなたの質問を編集してください*なぜ*彼はこれを試してみてください*なぜ*既存の回答。 –

8

あなたはSelect-Objectコマンドレットを使用して、あなたが興味を持っているプロパティ名(複数可)を指定する名前でプロパティを得ることができ、これは単に復帰しないことに注意してください。そのプロパティの生の値。代わりに、まだオブジェクトのように動作する何かを取得します。

[PS]> $property = (Get-Process)[0] | Select-Object -Property Name 

[PS]> $property 

Name 
---- 
armsvc 

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

そのプロパティのを使用するためには、あなたはまだ一つだけの特性があっても、あなたが後にしているどのプロパティを識別する必要があります。他の回答を1として

[PS]> $property.Name 
armsvc 

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

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

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

をここで、文字列内の単一のプロパティを使用する場合は、式を評価する(角かっこで囲む)と接頭辞にドル記号($)を付けると、式を文字列に挿入する変数として動的に宣言する必要があります。

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

Select-Objectコマンドレットの-ExpandPropertyパラメータを推奨することで、この問題に完全に対応している人もいます。これは、指定されたプロパティの値を返すことによって頭痛の一部を回避しますが、さまざまなシナリオで異なるアプローチを使用することになります。

-ExpandProperty <String>

選択するプロパティを指定し、試みは

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

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

そのプロパティを展開するためになされるべきであることを示し、
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

$ ARR = @( "jind"、12、 "シン") ライトホストの$ ARR [1] 読み取りホスト $のARR + = "レザ" ライトホストの$ ARR [3] 読み取りホスト ライトホスト$ ARR [$ arr.length-1] 読み取りホスト $ ARR = $ ARR -ne $ ARR [1] ライトホストの$ ARR $ ARRで読み取りホストを foreachの($ I ) {write-host $ i} – dhanoa