最佳实践:处理不存在的属性

时间:2015-04-15 13:14:33

标签: powershell properties

我在示例PowerShell脚本中看到的常见模式是这样的

If ($object.property -ne $true) {  
    $object.property = $true   
}

但是这无法解决$ object的特定实例不包含属性的情况,并且在这种情况下会出错。我特意在迭代网络适配器以启用WOL时遇到它,并且适配器不支持它。在任何情况下,一种方法是使用Try / Catch,但我的感觉是,如果有一种方法可以预先验证事物,则应避免例外。所以,我觉得Try / Catch应该是最后的手段吗?或者在PowerShell中使用Try / Catch作为解决错误的主要方法基本上没问题?如果try / Catch不是最好的答案,那么如何进行测试以查看某个特定对象是否具有属性,以便只是跳过该分配?我发现的一点点都是非常丑陋/混乱的方法,和/或辅助函数中的try / catch,所以你只是不知道你的大多数代码。除了解决代码可读性的辅助函数之外,其中没有一个本质上更好。

2 个答案:

答案 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
}