2012-01-25 4 views
0

を使用してアレイに対する変数と一致するようにしようと、私はホストが5つのDNSエントリを持つサーバー上のファイルを検索しています:のPowershellます。Get-コンテンツ

C:\ WINDOWS \ System32 \ Drivers \ Etc \ Hostsに

鉱山は、コメントの後に次のようになります。

127.0.0.1 infspcpd8tx8e.rtmphost.com

127.0.0.1 infspkbpef39p.rtmphost.com

私のホストで

127.0.0.1 infspo99vn3ti.rtmphost.com

127.0.0.1 infspqx6l10wu.rtmphost.com

127.0.0.1 infspvdkqjhkj.rtmphost.com

私は5線としてそれらを参照してくださいファイル私はそれをここに貼り付けると、間にスペースがあります。これは、そのファイルでget-contentを使用する場合と同じですが、私がそれを止めることは期待しません。

だから私はこういうようになっている配列を持っています: $ ACCOUNTS = Get-ChildItem "D:\ cyst \ accounts \" |名前を選択してください

私は、hostsファイルを含んでいる配列に対して$ accounts変数をチェックすることによって、hostsファイルに重複するエントリがあるかどうかを調べます。

foreach ($rtmp in $ACCOUNTS) { 
     $HostsFile = Get-Content C:\Windows\System32\drivers\etc\hosts | ForEach-Object {[System.Convert]::ToString($_)} 
     #$rt[string]$data = $HostsFile 
     [string]$rtmpfull = $rtmp.name + ".rtmphost.com" 

      if ($HostsFile -contains $rtmpfull) { Write-Host "Host found in hosts file moving on..." } 

       else { echo "wrong" 

       } 
     } 

これは決して一致しないし、常にfalseを返す、私は何にもマッチすることができない。助けてください - タイプ問題ですか?私はこの日のためにこれをgoogledしましたが、今私は絶望的で、ここに投稿しています。

答えて

0

エレガントではありませんが、仕事をします。

+0

これは新鮮な視点でありがとう=) –

0

このテスト:

if ($HostsFile -contains $rtmpfull) 

は$ hostsファイルに保存されている行全体を一致させるために$ rtmpfullを探しています。そうした部分一致がないかどうかチェックしたい。

$HostsFile = Get-Content C:\Windows\System32\drivers\etc\hosts | ForEach-Object {[System.Convert]::ToString($_)} 

if ($HostsFile | Foreach {$_ -match $rtmpfull}) 

ところであなたはこれを簡素化することができ、デフォルトで

$HostsFile = Get-Content C:\Windows\System32\drivers\etc\hosts 

は、Get-コンテンツは、あなたの配列の各要素が対応する文字列の配列を与えますファイル内の行

+0

ありがとうございますが、私はまだここにいくつかの問題があります。 $ HostsFile = Get-Content C:\ Windows \ System32 \ drivers \ etc \ hosts これには、上記と同じリストが含まれています。 私は、やる$ hostsファイル-contains $ rtmpfull $ rtmpfullは「127.0.0.1'tinfspvdkqjhkj」私もタブや単語やいくつかの単語と何も行全体を一致させよう です。私は $ hostsファイル-contains「127.0.0.1」を行うと、それがTRUE 取得する場合、私はラインに見られるが、他の単語を行うと、私は オイVEYの笑 –

+0

場合($ hostsファイルFALSE取得| foreachの{$ _ -match $ rtmpfull}) これは私のお尻を保存しました。私はそれがより空腹の少ないパフォーマンスにすることができればいいと思うが、それはあなたを感謝します! –

+0

ああ、今、私はすべての偽陽性を得ています。 –

2

私はあなたがおそらくforeachを使い払うだけでスピードアップできると思います。

(Get-Content C:\Windows\System32\drivers\etc\hosts) -match [regex]::escape($rtmpfull) 

hostsファイル全体を一度に一致させる必要があります。