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

标签 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."
}

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

最佳答案

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

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

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

关于powershell - 我应该如何处理返回不同类型值的函数和cmdlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14611499/

相关文章:

azure - 如何从 Azure Site Recover 获取所有 protected 项目及其详细信息

c# - 从 C# 在 powershell 中运行 AD 命令行开关时出错

types - 为什么这些参数被推断为具有单位类型?

string - 返回结果,带无引号的字符串

.net - 使用 -notcontains 过滤文件

sql - 如何使用 PowerShell 编辑 SQL 作业步骤

java - 获取通用类

C - 格式指定 int 类型,但参数的类型为 long

javascript - 为什么 node.js 没有发现我的错误?

error-handling - Clojure 中的 Stacktrace 和错误单子(monad)