许多函数和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."
}

当我有多个返回变量进行测试时,我的代码将快速嵌套。有没有更自然的方式来处理可能被多种类型之一占用的变量?

最佳答案

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

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

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

07-24 14:06