最佳实践:处理不存在的属性
Best Practice: handling properties that don't exist
我在示例 PowerShell 脚本中看到的一个常见模式是这样的
If ($object.property -ne $true) {
$object.property = $true
}
但这无法解决 $object 的特定实例不包含 属性 的情况,并且在这种情况下会出错。我 运行 专门在遍历网络适配器以启用 WOL 时进入它,并且适配器不支持它。在任何情况下,一种方法是使用 Try/Catch,但我的感觉是,如果有一种方法可以事先验证事物,则应避免异常。所以,我觉得 Try/Catch 应该是最后的手段吗?还是在 PowerShell 中使用 Try/Catch 作为解决错误的主要方法基本上没问题?如果 try/Catch 不是最佳答案,那么如何测试特定对象是否具有 属性 以便在没有时跳过赋值?我发现的很少 ugly/messy 方法,and/or 辅助函数中的 try/catch,所以您只是看不到大部分代码中的 if 。 None 除了解决代码可读性的辅助函数外,其中的本质更好。
也许是这样的?
if ($object.psobject.properties.name -contains $property)
{ $object.$property = $true }
我知道有几种方法可以解决这个问题。 偷了第一个。
第二种是使用Get-Member
If($object | Get-Member -MemberType Properties).Name -contains $property){
$object.$property = $true
}
我在示例 PowerShell 脚本中看到的一个常见模式是这样的
If ($object.property -ne $true) {
$object.property = $true
}
但这无法解决 $object 的特定实例不包含 属性 的情况,并且在这种情况下会出错。我 运行 专门在遍历网络适配器以启用 WOL 时进入它,并且适配器不支持它。在任何情况下,一种方法是使用 Try/Catch,但我的感觉是,如果有一种方法可以事先验证事物,则应避免异常。所以,我觉得 Try/Catch 应该是最后的手段吗?还是在 PowerShell 中使用 Try/Catch 作为解决错误的主要方法基本上没问题?如果 try/Catch 不是最佳答案,那么如何测试特定对象是否具有 属性 以便在没有时跳过赋值?我发现的很少 ugly/messy 方法,and/or 辅助函数中的 try/catch,所以您只是看不到大部分代码中的 if 。 None 除了解决代码可读性的辅助函数外,其中的本质更好。
也许是这样的?
if ($object.psobject.properties.name -contains $property)
{ $object.$property = $true }
我知道有几种方法可以解决这个问题。
第二种是使用Get-Member
If($object | Get-Member -MemberType Properties).Name -contains $property){
$object.$property = $true
}