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
これは間違った形式ですか?
チェックイン: - : - -username1 - -username2 -username 'foreachの($ユーザーで$ユーザー){ "$ USER-"}' –
は、これはユーザーとして上場しました - – takeitback
これらの要素は、あなたが得ていると言ったエラーを生成しません。問題の再現を可能にするサンプル入力データを提供してください。 –