2

私は(私にとって)かなり高度な構文の次の行に出くわしました:

(Get-ADReplicationSubnet -Filter *) -notmatch [String]::Join('|',$c.Subnet)

上記はまさに私が望むことを行い、$c.Subnet変数と一致しないサブネットのリストを取得します。以下の行で同じ効果を再現してみました。これは動作しません。

Get-ADReplicationSubnet -Filter * | Where {$_.Name -notmatch $c.Subnet}

私の質問は; 最初の行がどのように機能するかを簡単な英語で誰か説明できますか? ([String]::Join('|',$c.Subnet)よくわかりません。名前がわからないものを検索するのは難しいです。それと、私のバージョンはなぜ動かないのですか?

$c.Subnetそれが値の配列であることを明確にする必要があります。

4

2 に答える 2

3

[String]::Join('|',$c.Subnet).NET フレームワークへの呼び出し (クラスのJoin()メソッド) です。こちらStringのドキュメントをご覧ください。

ドキュメントは、戻り値の次の説明につながります。A string that consists of the elements in value delimited by the separator string. If value is an empty array, the method returns String.Empty.

これは、戻り文字列がvalue1|value2|value3(それぞれvalueが からの値で$c.Subnetある) のようなものになることを意味します。これは、意味-notmatchを持つ正規表現として解釈されます。最初の行が行うことは、 orまたはに一致しない値を返すことです。|or value1 value2 value3

なぜ(私が思うに)あなたの行が機能しないのは-notmatch、文字列ではなく配列を使用しているためです。この記事には、この 2 つの使用方法に関する情報が含まれています。

于 2013-09-25T19:26:41.647 に答える