2

次の XML ドキュメントについて考えてみましょう。

$xml = [xml] "<root><value>one</value><value>two</value></root>"

そして、値を出力します(いくつかのプレフィックス/サフィックスを付けて):

$xml.root.value | %{"*$_*"}
*one*
*two*

ここまでは順調ですね。ただし、要素が存在しない場合は、null アイテムがパイプラインを介して伝播されます。

$xml.root.foo | %{"*$_*"}
**

何故ですか?この追加のチェックを回避する方法はありますか:

$xml.root.foo | ?{$_} | %{"*$_*"}

忘れがちで、エラーが発生しやすいようです。

4

2 に答える 2

2

欠落しているプロパティのサイレントフェイルをオフにするには、次を使用しますSet-StrictMode -Version Latest

PS> $xml = [xml] "<root><value>one</value><value>two</value></root>"
PS> $xml.root.foo | %{"*$_*"}
**
PS> Set-StrictMode -Version Latest
PS> $xml.root.foo | %{"*$_*"}
Property 'foo' cannot be found on this object. Make sure that it exists.
At line:1 char:1
+ $xml.root.foo | %{"*$_*"}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], PropertyNotFoundException
    + FullyQualifiedErrorId : PropertyNotFoundStrict

これは、存在しない変数への参照もキャッチすることに注意してください。この方法で使用することを強くお勧めしSet-StrictModeます。これにより、より大きなスクリプトのデバッグ時間を節約できます。

于 2012-04-25T23:56:07.270 に答える