プロパティ名でオブジェクトのプロパティの値を取得するにはどうすればよいですか?


132

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」に似たものはありますか?

回答:


198

承知しました

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

またはそのことについて:

$obj."SomeProp"

12
展開することを忘れselect -expand "SomeProp"ないでください:値が必要な場合。select "SomeProp"プロパティ「SomeProp」とcustomobjectを返し、その後、彼はかなり戻って、ステップ1で、だ
フローデ・F.

2
使用する方法がある$obj."SomeProp"にはwrite-host
マフィンマン

@TheMuffinMan、はい、それはwrite-host $ obj。 "$ somepropertyname"のような一般的に適用可能な機能です
Elroy Flynn

4
文字列が変数にある場合$obj.($propName)も機能します。(かっこは必須ではありませんが、かっこがないと、私に奇妙に見えます。)
jpmc26

3
あなたがしている場合$propName、たとえばオブジェクトに格納され$Headers.PropertyName、その後に括弧が必要です$obj.($Headers.PropertyName)
Jonas Lomholdt

41

@aquinasの拡張:

Get-something | select -ExpandProperty PropertyName

または

Get-something | select -expand PropertyName

または

Get-something | select -exp PropertyName

いくつかの情報を取得するために1行のコマンドを探しているだけで、実際の例を含めたいと思っている人のために、これらの提案を行いました。

PowerShellを介してOffice 365を管理する場合、「BookInPolicy」リストに追加されたすべてのユーザー/グループを取得するために使用した例を次に示します。

Get-CalendarProcessing conferenceroom@domain.com | Select -expand BookInPolicy

「Select BookInPolicy」を使用しただけでは、いくつかのメンバーが切り離されていました。この情報をありがとうございます。


27

コマンドレットを使用し、目的のプロパティ名を指定して、名前でプロパティを取得できます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

かなり正確に、他の人はコマンドレットの-ExpandPropertyパラメーターを推奨することでこの質問に回答していますSelect-Object。これは、指定されたプロパティの値を返すことで頭痛の一部を回避しますが、異なるシナリオでは異なるアプローチを使用する必要があります。

-ExpandProperty <String>

選択するプロパティを指定し、そのプロパティを展開しようとする必要があることを示します

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

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


8

これを試して :

$obj = @{
    SomeProp = "Hello"
}

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

StackOverflowへようこそ。質問を編集して、なぜ彼がこれを試す必要があるの、また既存の回答が改善される理由を説明してください。
T3 H40

この回答はIMOであり、オブジェクトからプロパティの文字列名を持つことに基づいてプロパティを安全に取得する最も簡単な方法ですが、説明もありません。
トロイパラチーノ

`` `$ obj = @ {Prop ="値 "; }; $ propName = "プロップ" '; Write-Host "$ propNameの値は$($ obj。" $ propName ")" $ propName = "NonexistentProp" '; Write-Host "$ propNameの値は$($ obj。" $ propName ")" `` `が出力され The value of Prop is Value 、その後The value of NonexistentProp is
Troy Palacinoが

うわー!マークダウンのドキュメントはヘルプのコメントにリンクされていますが、それらには適用されません。本当にいいSO
開発者

3

オブジェクトのプロパティ値を取得する別の方法を次に示します。

write-host $(get-something).SomeProp

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

$ arr = @( "jind"、12、 "singh")書き込みホスト$ arr [1]読み取りホスト$ arr + = "reza"書き込みホスト$ arr [3]読み取りホスト書き込みホスト$ arr [ $ arr.length-1] read-host $ arr = $ arr -ne $ arr [1] write-host $ arr read-host foreach($ i in $ arr){write-host $ i}
dhanoa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.