我们有一个每周运行一次并调整特定文件共享的所有权限的脚本。我主要为此使用 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