我在示例PowerShell脚本中看到的常见模式是这样的
If ($object.property -ne $true) {
$object.property = $true
}
但是这无法解决$ object的特定实例不包含属性的情况,并且在这种情况下会出错。我特意在迭代网络适配器以启用WOL时遇到它,并且适配器不支持它。在任何情况下,一种方法是使用Try / Catch,但我的感觉是,如果有一种方法可以预先验证事物,则应避免例外。所以,我觉得Try / Catch应该是最后的手段吗?或者在PowerShell中使用Try / Catch作为解决错误的主要方法基本上没问题?如果try / Catch不是最好的答案,那么如何进行测试以查看某个特定对象是否具有属性,以便只是跳过该分配?我发现的一点点都是非常丑陋/混乱的方法,和/或辅助函数中的try / catch,所以你只是不知道你的大多数代码。除了解决代码可读性的辅助函数之外,其中没有一个本质上更好。
答案 0 :(得分:1)
这样的事,也许?
if ($object.psobject.properties.name -contains $property)
{ $object.$property = $true }
答案 1 :(得分:0)
我知道有几种方法可以解决这个问题。 mjolinor抢走了第一个。
第二种方法是使用Get-Member
If($object | Get-Member -MemberType Properties).Name -contains $property){
$object.$property = $true
}