我应该如何处理返回不同类型值的函数和cmdlet?

时间:2013-01-30 18:49:17

标签: powershell types error-handling

许多函数和cmdlet根据传递给它的参数返回不同的类型。这使我有必要测试返回值。目前我正在使用嵌套的if-then-else语句。这是我今天开始编写的一个示例脚本,用于验证IP配置:

$adapters = get-wmiobject win32_networkadapterconfiguration -filter "ipenabled = 'true'"
$adapters_type = $adapters.gettype().tostring()
if ($adapters_type -eq "System.Management.ManagementObject") {
    #TODO: configure network adapter.
}
else if ($adapters_type -eq "System.Object[]") {
  #TODO: handle the case of multiple network adapters.
}
else {
  echo "error: unexpected type returned from internal function."
}

当我有多个返回变量来测试时,我的代码会快速嵌套。有没有更自然的方法来处理可能由多种类型之一居住的变量?

1 个答案:

答案 0 :(得分:2)

一个选项是确保Get-WmiObject上的结果始终是一个数组,例如:

$adapters = @(get-wmiobject win32_networkadapterconfiguration -filter "ipenabled = 'true'")
foreach ($adapter in $adapters) {
    #TODO: configure adapter
}

除此之外,并且可能使用switch语句而不是一堆if / else语句,没有更好的方法来处理我能想到的不同返回类型。