如何通过PowerShell中的属性名称获取对象的属性值?

在PowerShell中,如何通过指定对象的名称(string)来获取对象的属性值? 我想要的东西如下:

$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”的东西?

当然

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

或者就此而言:

 $obj."SomeProp" 

扩展@aquinas:

 Get-something | select -ExpandProperty PropertyName 

要么

 Get-something | select -expand PropertyName 

要么

 Get-something | select -exp PropertyName 

我为那些可能只是在寻找单行命令来获取某些信息并希望包含一个真实世界的例子的人提出了这些build议。

在通过PowerShellpipe理Office 365中,以下是我用来获取已添加到“BookInPolicy”列表中的所有用户/组的示例:

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

只是使用“selectBookInPolicy”被切断了几个成员,所以感谢您的信息!

您可以使用Select-Object cmdlet通过名称获取属性 ,并指定您感兴趣的属性名称。请注意,这不会简单地返回该属性的原始值; 相反,你得到的东西仍然像对象一样。

 [PS]> $property = (Get-Process)[0] | Select-Object -Property Name [PS]> $property Name ---- armsvc [PS]> $property.GetType().FullName System.Management.Automation.PSCustomObject 

为了使用该属性的 ,即使只有一个属性,您仍然需要确定后面的属性:

 [PS]> $property.Name armsvc [PS]> $property -eq "armsvc" False [PS]> $property.Name -eq "armsvc" True [PS]> $property.Name.GetType().FullName System.String 

根据这里的其他答案,如果你想在一个string中使用一个单独的属性,你需要评估expression式(在其周围放置括号)和前缀以美元符号($)dynamic地声明expression式作为要插入的variables进入string:

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

相当正确的是,其他人通过推荐Select-Object cmdlet的-ExpandProperty参数来回答这个问题。 这通过返回指定属性的值绕过了一些头痛的问题,但是您会希望在不同的场景中使用不同的方法。

-ExpandProperty <String>

指定要select的属性,并指示应该尝试展开该属性

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

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

PowerShell variables

尝试这个 :

 $obj = @{ SomeProp = "Hello" } Write-Host "Property Value is $($obj."SomeProp")" 
 $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