2つの主な違いは、最初のコマンドはすべての結果を取得するための値の直接比較を必要とせず、2番目のコマンドはそうすることです。最初のコマンドにはNULLの結果が含まれ、2番目のコマンドには含まれません(MDMarraがすでに発見したため)。どちらのコマンドも次のコマンドレットで始まります。
get-aduser
以下の手順を実行するときは、このコマンドレットの結果には、-filter
その後のパラメーターの他の部分に関係なく、すべてのADユーザーが含まれることに注意してください。
次に、異なる2つの部分を分解してみましょう。最初の1つ:
{-not (description -eq "auto")}
...手段
- "description属性がテキスト文字列" auto " と等しい場所を見つけ出します。この比較が機能するためには、
-eq
演算子が" auto "と比較できるように文字列がdescriptionフィールドに存在する必要があります。NULL値はこれから削除されますNULLと文字列値を比較できないためです。
- 独立して
-eq
(description -eq "auto")
元のコマンドレットget-aduser
にはすべてのADユーザーが含まれているため、フィルターパラメーターはの結果ではないすべてを私に提供します。これにはNULLが含まれます。-not
オペレーターと比較する必要はありませんでした。(description -eq "auto")
フィルターの結果以外のすべてが得られました。
あなたの例では、 "auto"に等しい説明を持つ1人のADユーザーがいて、 "auto"以外の何かで数百人、NULLの説明で数百人いるとします。実行するコマンドロジックをステップ実行します。
- 説明が「auto」に等しいすべてのADユーザー(get-aduser)を取得します-1ユーザーになります
- ちょうどあなたが私に与えたものではないすべてのADユーザーを私に与えてください-結果は何か他のものを持つ数百とNULLを持つ数百です。
-not
演算子を使用して他のものと比較する必要がないため、結果には、元のget-aduser
コマンドレットでキャプチャされたNULLの説明ユーザーが含まれていました。
2番目のコマンド:
{description -ne "auto"}
...手段
- "description属性が正確な文字列" auto " と等しくない場所を見つけ出します。ここでも、この比較が機能するためには、
-ne
演算子が" auto "と比較できるように文字列がdescriptionフィールドに存在する必要があります。NULL値NULLと文字列値を比較できないため、この比較から除外されます。
この例でも、「auto」と同じ説明を持つADユーザーが1人いるとします。数百は「auto」以外のもので、数百はNULLの説明です。実行するコマンドロジックをステップ実行します。
- 説明が「auto」と等しくないすべてのADユーザーを教えてください。数百人のユーザーの説明に「auto」以外のものが含まれています。NULLとテキスト文字列を比較できないため、NULLの説明でユーザーをプルしません。
どちらの方法でも、2つのコマンドの違いはまったく直感的ではありません。
このコマンドを使用すると、次のように "-and"でNULLをキャッチできるはずです。
{description -ne "auto" -and description -ne $NULL}
今は構文をテストできないので、構文を完全に理解しているわけではありません。おそらく、これよりも優れた方法があります。すべてが分解されると、かなり気候が悪くなり、説明するのに多くの入力が必要になりますが、さまざまな演算子を使用する前に、このような奇妙なことに遭遇したり、すべての注意事項を思い出せないため、多くの試行錯誤を繰り返したりしました。それぞれを使用することでうまくいきます。
リファレンス:http : //technet.microsoft.com/en-us/library/hh847732.aspx:
比較演算子
値とテスト条件を比較するには、比較演算子(-eq、-ne、-gt、-lt、-le、-ge)を使用します。たとえば、2つの文字列値を比較して、それらが等しいかどうかを判断できます。
比較演算子には、正規表現を使用してパターンを検索する一致演算子(-match、-notmatch)が含まれます。正規表現を使用して入力値を変更する置換演算子(-replace)。like演算子(-like、-notlike)。ワイルドカード文字(*)を使用してパターンを検索します。および包含演算子(in、-notin、-contains、-notcontains)は、テスト値が参照セットに表示されるかどうかを決定します。
また、値のビットパターンを操作するためのビット演算子(-bAND、-bOR、-bXOR、-bNOT)も含まれています。
詳細については、about_Comparison_Operatorsを参照してください。
論理演算子
論理演算子(-and、-or、-xor、-not 、!)を使用して、条件ステートメントを単一の複雑な条件に接続します。たとえば、論理AND演算子を使用して、2つの異なる条件を持つオブジェクトフィルターを作成できます。
詳細については、about_Logical_Operatorsを参照してください。