週に 1 回実行され、特定のファイル共有に対するすべてのアクセス許可を調整するスクリプトがあります。これには主に PowerShell スクリプトを使用しますが、一部で icacls.exe も実行します。ファイル数が多いため、icacls.exe実行時にエラーが発生します
スクリプトの開始時に、各顧客フォルダーのすべてのアクセス許可をリセットし、その後、そのすべての子アイテムのアクセス許可をリセットしました。これの一部は、オブジェクトの所有者をリセットすることで構成されています。
このようにicacls.exeを呼び出しています。
$ICACLSResult = icacls "$OBJPath\*" /setowner $OBJOwner /t /c /q | Out-String
次に$ICACLSResult
、特定のテキストの文字列をチェックして、エラーが発生したかどうかを確認し、文字列自体をエラー メッセージに追加します。
if($ICACLSResult -notmatch "bei 0 Dateien ist ein Verarbeitungsfehler aufgetreten" -and $ICACLSResult -notmatch "Failed processing 0 files")
{
Add-Error -SED ($ErrorMSG + $ICACLSResult) -Level 2 -AddErrorInfo $False -ExitScript $False
Throw("AnErrorOccured")
}
ただし、変数の実際の内容は$ICACLSResult
次のようになります。
Successfully processed 13970 files; Failed processing 5 files
しかし、コンソール内で同じコマンドを直接実行すると、次のようになります。
PS C:\Users\User> $ICACLSResult = icacls "$OBJPath\*" /setowner $OBJOwner /t /c /q | Out-String
D:\Folder1\Folder2\Folder3\File.txt: The system cannot find the path specified.
D:\Folder1\Folder2\Folder3\File.txt: The system cannot find the path specified.
D:\Folder1\Folder2\Folder3\File.txt: The system cannot find the path specified.
D:\Folder1\Folder2\Folder3\File.txt: The system cannot find the path specified.
D:\Folder1\Folder2\Folder3\File.txt: The system cannot find the path specified.
PS C:\Users\User>
でもまた$ICACLSResult
こんな感じ。
PS C:\Users\User> $ICACLSResult
Successfully processed 13970 files; Failed processing 5 files
PS C:\Users\User>
これらの詳細なエラー メッセージがなければ、変数をログに記録して$ICACLSResult
も意味がありません。失敗したファイルの数だけが示され、どのファイルが具体的にどのファイルであるかが示されるわけではないためです。
この追加情報も取得して に保存するにはどうすればよい$ICACLSResult
ですか? 私が欲しいのは、失敗したファイルのパスだけです。
私もこれまでに試したこと
$ICACLSResult = icacls "$OBJPath\*" /setowner $OBJOwner /t /c /q 2>&1
$ICACLSResult = icacls "$OBJPath\*" /setowner $OBJOwner /t /c /q 2>&1 | Out-String -Stream -Width 9999
$ICACLSResult = icacls "$OBJPath\*" /setowner $OBJOwner /t /c /q
機能しない理由
- 情報が多すぎます。改行が含まれています
- 情報が多すぎます。改行が含まれています
- 必要な情報がまだ変数にない
$ICACLSResult