1

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

当我有多个返回变量来测试我的代码时,我的代码很快就会嵌套得很深。是否有一种更自然的方法来处理可能由多种类型中的一种所占据的变量?

4

1 回答 1

2

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

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

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

于 2013-01-30T18:53:48.300 回答