在 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”的东西?
当然
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
仅使用“Select BookInPolicy”就切断了几个成员,所以感谢您提供此信息!
您可以使用 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
根据此处的其他答案,如果要在字符串中使用单个属性,则需要评估表达式(将括号括在其周围)并以美元符号($)作为前缀以将表达式动态声明为要插入的变量进入字符串:
[PS]> "The first process in the list is: $($property.Name)"
The first process in the list is: armsvc
完全正确,其他人通过推荐 Select-Object
cmdlet 的 -ExpandProperty
参数来回答这个问题。这通过返回指定属性的值绕过了一些令人头疼的问题,但是您将希望在不同的场景中使用不同的方法。
-ExpandProperty
[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name
armsvc
尝试这个 :
$obj = @{
SomeProp = "Hello"
}
Write-Host "Property Value is $($obj."SomeProp")"
The value of Prop is Value
然后 The value of NonexistentProp is
这是获取对象属性值的另一种方法:
write-host $(get-something).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
不定期副业成功案例分享
select -expand "SomeProp"
。select "SomeProp"
返回一个带有属性“SomeProp”的自定义对象,然后他几乎回到了第 1 步。write-host
中使用$obj."SomeProp"
?$obj.($propName)
也可以使用。 (括号不是必需的,但如果没有括号,对我来说它看起来真的很奇怪。)$propName
存储在一个对象中,例如$Headers.PropertyName
,那么括号是必需的$obj.($Headers.PropertyName)
。