1

多くの関数とコマンドレットは、渡された引数に応じて異なる型を返します。これにより、戻り値をテストする必要があります。現在、ネストされた 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

1 つのオプションは、Get-WmiObject の結果が常に配列になるようにすることです。

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

それ以外に、おそらく一連の if/else ステートメントの代わりに switch ステートメントを使用すること以外に、私が考えることができるさまざまな戻り値の型を処理するより良い方法はありません。

于 2013-01-30T18:53:48.300 に答える