PowerShell-contains-like

人々がPowerShellで利用可能な演算子(help about_comparison_operators)を探索しているとき、彼らはしばしば2つの似ているように見えるが、大幅に異なる演算子私はしばしば誰かがこれを試してみるのを見ます:

if ($string -contains '*win*') { }

彼らは$stringに文字”win”が含まれているかどうかを確認しようとしていますが、残念ながらそれは-containsが行うことではありません。 彼らが本当に使いたいのは、-like演算子です:if(string string-like’*win*’){}

あなたが大声で言うとき、それはうまく読まれないことを知っています。 ちょっと谷の女の子に聞こえる、私は思う。 “この変数のようなものが、このワイルドカード、omigodのようなものであれば、本当に好きですか?”But-likeはこのタスクの正しい演算子です。

-contains演算子は少しトリッキーです。 これは、オブジェクトのコレクションに特定のオブジェクトが含まれている(’contains’)かどうかを通知するように設計されています。 さて、あなたのオブジェクトのコレクションが文字列の束であれば、これはかなり簡単です。p>

$coll = "one','two','three','four'if ($coll -contains 'one') { }

コレクションに複雑なオブジェクトが含まれていると難しくなります。 これはあなたが考えるようには機能しません:

variable coll=Get-Service
if(.coll-contains’BITS’){}

変数$collには文字列”BITS;”が含まれていませんNameプロパティがBITSです。 この方法では、オブジェクト全体を比較するため、実際には-containsを使用することはできません。 例えば:

#すべてのプロセスを取得
proc procs=Get-Process

#一つだけのプロセスを取得
proc proc=Get-Process/Select-first1

#それを確認
proc procs-contains$proc

これはほとんど常にFalseになります。 これは、2番目のコマンドを実行するのにかかる時間内に、最初のプロセスが変更されたためです。 メモリ、CPU、またはその他の値が変更されました。 Proc procsにはactual procと同じ実際のプロセスが含まれていますが、すべての単一のプロパティが両方のインスタンスでまったく同じではありません。 したがって、-containsは一致を検出できません。

“トップテン”の詳細については、”トップテン”を参照してください。”

この記事について質問したいですか? 私はhttp://powershell.com/cs/forums/230.aspxで答えます!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です