ChatGPT解决这个技术问题 Extra ChatGPT

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

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


a
aquinas

当然

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

或者就此而言:

$obj."SomeProp"

如果您想要该值,请记住 expand: select -expand "SomeProp"select "SomeProp" 返回一个带有属性“SomeProp”的自定义对象,然后他几乎回到了第 1 步。
有没有办法在 write-host 中使用 $obj."SomeProp"
@TheMuffinMan,是的,这是一个普遍适用的功能,比如 write-host $obj."$somepropertyname"
当您的字符串在变量中时,$obj.($propName) 也可以使用。 (括号不是必需的,但如果没有括号,对我来说它看起来真的很奇怪。)
如果您将 $propName 存储在一个对象中,例如 $Headers.PropertyName,那么括号是必需的 $obj.($Headers.PropertyName)
S
Stephen Ostermiller

扩展@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”就切断了几个成员,所以感谢您提供此信息!


C
Charlie Joynt

您可以使用 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 指定要选择的属性,并指示应尝试扩展该属性 https://technet.microsoft.com/en-us/library/hh849895.aspx

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


J
John Slegers

尝试这个 :

$obj = @{
    SomeProp = "Hello"
}

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

欢迎来到 StackOverflow,请编辑您的问题并解释他为什么应该尝试这个以及为什么它会改进现有的答案。
我在赞成票和反对票方面存在冲突,因为这个答案是 IMO 最简单的方法,可以根据从对象中获取属性的字符串名称来安全地获取属性,但也没有提供任何解释。
``` $obj = @{ 道具 = “价值”; }; $propName = "道具"'; Write-Host "$propName 的值为 $($obj."$propName")" $propName = "NonexistentProp"'; Write-Host "The value of $propName is $($obj."$propName")" ``` 将打印 The value of Prop is Value 然后 The value of NonexistentProp is
哇!降价文档链接在评论帮助中,但不适用于它们。非常好的 SO 开发人员
D
Duncan Clay

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

write-host $(get-something).SomeProp

与保存在变量中的 propname 一起使用:` $someprop = "SomeProp";写主机 $(get-something).$someprop`
L
Laurel
$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] 读取主机 $arr = $arr -ne $arr[1] 写入主机 $arr 读取主机 foreach ($i in $arr) {写入主机 $i}

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅