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

在 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”的内容吗?

405734 次浏览

当然

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

或者说:

$obj."SomeProp"

扩展@aquinas:

Get-something | select -ExpandProperty PropertyName

或者

Get-something | select -expand PropertyName

或者

Get-something | select -exp PropertyName

对于那些可能只是寻找单行命令来获取一些信息并希望包含一个真实示例的人,我提出了这些建议。

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

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

仅仅使用“选择 BookInPolicy”就切断了几个成员,所以感谢您提供这些信息!

试试这个:

$obj = @{
SomeProp = "Hello"
}


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

您可以使用 Select-Objectcmdlet 并指定您感兴趣的属性名称,通过名称获取 财产。请注意,这并不仅仅返回该属性的原始值; 相反,您得到的仍然是行为类似于对象的内容。

[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

根据这里的其他答案,如果你想在一个字符串中使用一个属性,你需要计算表达式(在它周围放上方括号)并加上一个美元符号($)作为前缀,以动态地将表达式声明为一个要插入到字符串中的变量:

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

非常正确的是,其他人通过推荐 Select-Object cmdlet 的 -ExpandProperty参数来回答这个问题。这通过返回指定属性的值避免了一些麻烦,但是您可能希望在不同的场景中使用不同的方法。

-ExpandProperty <String>

指定要选择的属性,并指示尝试应 被迫扩大那个财产

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

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

< a href = “/questions/tags/variable”class = “ post-tag”title = “ show questions tags & # 39;”rel = “ tag”> variable

$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

下面是获取对象属性值的另一种方法:

write-host $(get-something).SomeProp