2016-04-18 15 views
0

4つの見出しを持つCSVファイルがあります。最も重要なものはIPアドレスです。私がする必要があるのは、特定のファイルディレクトリとすべての子ファイルとディレクトリを検索して、IPアドレスがどのファイルにも含まれていないかどうかを調べることです。 IPアドレスがいずれかのファイルに含まれていない場合は、IPアドレスをアレイに追加し、すべてのIPアドレスのチェックを続行します。完了したら、配列の内容をリストします。
パス[0]ファイルディレクトリ内にクエリ文字列とリスト文字列が見つかりません

:それは、特にコマンドパイプラインの位置次のパラメータの1つの
サプライ値で

コマンドレットは、Get-コンテンツを言ってGet-Contentコマンドレットで立ち往生され

$Path = "C:\Users\Me\Desktop\nagios\configs\hosts" 
$NotMonitoredArray = @() 

$servers = Import-Csv "C:\wpg-export.csv" 
foreach ($item in $servers) { 
    Get-ChildItem $Path -Recurse | Where-Object { 
     $_.Attributes -ne "Directory" 
    } | ForEach-Object { 
     if (Get-Content | Where-Object { !(Select-String -Pattern $_.IPAddress -Quiet) }) { 
      $NotMonitoredArray += $_.IPAddress 
     } 
    } 
} 

答えて

2

Get-Contentには、指定しなかった必須パラメータ-Pathがあります。それがあなたが観察したエラーの原因です。ただし、Select-Stringはそれ自体でファイルを読み取ることができるので、最初にGet-Contentは必要ありません。また、ディレクトリツリー全体からファイルを複数回読み取らないようにしたいと思っています。代わりに、あなたのCSVでのIPアドレスからの正規表現を作成します。

$csv = Import-Csv 'C:\wpg-export.csv' 
$pattern = ($csv | ForEach-Object { 
      '({0})' -f [regex]::Escape($_.IPAddress) 
      }) -join '|' 

は、単一の実行中にファイルに存在する固有のIPアドレスを見つけるために、そのパターンを使用します。その後、

$foundIP = Get-ChildItem $Path -Recurse | 
      Where-Object { -not $_.PSIsContainer } | 
      Select-String -Pattern $pattern | 
      Select-Object -Expand Matches | 
      Select-Object -Expand Value -Unique 

と使用CSVをフィルタリングする結果のリスト:

$NotMonitoredArray = $csv | Where-Object { $foundIP -notcontains $_.IPAddress } | 
        Select-Object -Expand IPAddress 
関連する問題