2016-09-01 5 views
0

2つのテキスト文書を相互参照してレポートを作成しようとしています。私はC:\ formeremployees.txtとC:\ shareaudit.txtを持っています。あなたが推測できるように、formeremployees.txtには元従業員のユーザー名のリストしかありません。ヘッダーはありません。ユーザー名のみ。 C:\ shareaudit.txtには、フォルダパスの横の同じ行にACL情報を持つ、共有上のすべてのフォルダのリストが含まれています。

$Users = Get-Content C:\formeremployees.txt 

foreach ($User in $Users) { 
    $Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "$User" 
    $Output.Line | Out-File C:\completereport.txt -Append 
} 

しかし残念ながら、私は次のエラーを取得する:

Select-String : Cannot bind argument to parameter 'Pattern' because it is an 
empty string. 
At line:7 char:71 
+ $Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "$User" 
+               ~~~~~~~ 
    + CategoryInfo   : InvalidData: (:) [Select-String], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.SelectStringCommand 

Select-String : Cannot bind argument to parameter 'Pattern' because it is an 
empty string. 
At line:7 char:71 
+ $Output = Select-String -Path "C:\ShareAudit.txt" -Pattern "$User" 
+               ~~~~~~~ 
    + CategoryInfo   : InvalidData: (:) [Select-String], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.SelectStringCommand

ここ

はformeremployees.txtからユーザーアカウントを持っている行が表示されていることをレポートを作成する時、私の試みでしたその後、私は悲しい、空のcompletereport.txtファイルを取得します。私はこれを働かせるか、それが可能かどうかを知ることができません。

Edit________________________

は、ここで私が試したし、その結果、他に何だ:\ completereport.txt文書:

$Users = Get-Content C:\formeremployees.txt|?{!([string]::IsNullOrWhitespace($_))} 

foreach ($User in $Users) { 
    $Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "$User" 
    $Output.Line | Out-File C:\completereport.txt -Append 
} 

これは私の空白のCを与えました。

$Users = Get-Content C:\formeremployees.txt|?{!([string]::IsNullOrWhitespace($_))} 
$Pattern = ($Users|ForEach{[regex]::escape($_)}) -join '|' 
Get-Content "C:\Shareaudit.txt" | Where{$_ -match $Pattern} | Set-Content C:\completereport.txt 

この限りでは、これは私が何もしなかったと言うことができます。終了時に作成されたcompletereport.txtドキュメントはありませんでした。

$Users=(Get-Content C:\formeremployees.txt) -ne '' 

foreach ($User in $Users) { 
    $Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "$User" 
    $Output.Line | Out-File C:\completereport.txt -Append 
} 

これは私に空白のテキスト文書を与えました。私はまだシェアで一部のフォルダへのアクセス権を持っていたし、formeremployee.txtにも知っていたユーザ名に入れた場合、スクリプトが意図したとおりに働いていたし、私がとても必要なフォルダのリストを与えた

$Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "<single username from formeremployeee.txt>" 
    $Output.Line | Out-File C:\completereport.txt -Append 

スクリプトの下部に何も問題はないので、何かがformeremployee.txtか$ Users変数を使っているかのように思っています。さらにテストするには

、私はこれを試してみました:

$Users=(Get-Content C:\formeremployees.txt) -ne '' 

foreach ($User in $Users) { 
    Select-String -Path "C:\Shareaudit.txt" -Pattern "$User" 
} 

これは、出力任意の結果をしませんでした。テキストformeremployee.txtファイルには、ユーザー名が次のように表示されます。

username1 
username2 
username3 
username4 

これは間違った形式ですか?

+2

チェックイン: - : - -username1 - -username2 -username 'foreachの($ユーザーで$ユーザー){ "$ USER-"}' –

+0

は、これはユーザーとして上場しました - – takeitback

+0

これらの要素は、あなたが得ていると言ったエラーを生成しません。問題の再現を可能にするサンプル入力データを提供してください。 –

答えて

3

最も明白な答えは、FormerEmployee.txtファイルに空白行があることです。最も簡単な解決策は、あなたの最初の行を更新することです:代わりに、私はおそらく物事をスピードアップするために何をするのか

$Users = Get-Content C:\formeremployees.txt|?{!([string]::IsNullOrWhitespace($_))} 

は、ユーザーのうち、正規表現パターンを作成し、一度Select-Stringを実行すると、ユーザーごと:

実際に空の要素がある場合
$Users = Get-Content C:\formeremployees.txt|?{!([string]::IsNullOrWhitespace($_))} 
$Pattern = ($Users|ForEach{[regex]::escape($_)}) -join '|' 
Get-Content "C:\Shareaudit.txt" | Where{$_ -match $Pattern} | Set-Content C:\completereport.txt 
+0

どうして '(Get-Content C:\ formeremployees.txt)-ne '''? – wOxxOm

+0

'Set-Content C:\ completereport.txt'ファイルが存在しない場合は作成しますか?私はそれがうまくいったかどうかを調べた。これは2分ほど前から実行されていますが、まだC:\ completereport.txtファイルはありませんが、スクリプトが終了するまで待機します。しかし、助けてくれてありがとう。私はまだ学んでいる、これは私に見てたくさん与える。 – takeitback

+0

上記のスクリプトを使用してもエラーは発生しませんでしたが、C:\ completereport.txtファイルは結果とともに作成されませんでした。 – takeitback