我正在寻找一种动态调用函数的方法或属性的方法。例如,我想要调用$ Error [0]的每个属性。我可以通过以下方式获取所有属性名称的列表:
$a = ($error[0] | get-member -type property | select Name)
我想做这样的事情:
foreach($b in $a){
$error[0].&($b.Name)
}
但是调用运算符(&)并没有像我期望的那样解析$ b.Name(它应该解析为'CatagoryInfo')。无论如何都要做这样的事情吗?
答案 0 :(得分:0)
您可以使用Invoke-Expression
:
$a = ($error[0] | get-member -type property | select Name)
foreach($b in $a){
Invoke-Expression "`$error[0].$($b.Name)"
}
答案 1 :(得分:0)
只需删除&
$a = ($error[0] | get-member -type property | select Name)
foreach($b in $a){
$error[0].($b.Name)
}
答案 2 :(得分:0)
您可以使用不同的方式来检索属性:
$Properties=$Error[0].PSObject.Properties
这将返回PSPropertyInfo
个对象的集合。 PSPropertyInfo
个对象具有Value
属性,您可以使用该属性来获取或设置属性值:
$Properties|ForEach-Object {'Name={0}; Value={1}'-f$_.Name,$_.Value}
还要注意检索属性值的一些可能的问题。 PowerShell允许您使用属性语法访问IDictionary
元素。这里的问题是PowerShell更喜欢访问集合元素而不是实际属性:
$Hashtable=@{}
$Hashtable.Count
# 0
$Hashtable.Add('SomeName',10)
$Hashtable.SomeName
# 10
$Hashtable.Count
# 1
$Hashtable.Add('Count',20)
$Hashtable.Count
# 20
$Hashtable|Select-Object -ExpandProperty Count
# 2