0

我有一个脚本可以审核 NTFS 权限。

ForEach ($Folder in $Folders){
    $ACLs = Get-ACL $Folder.FullName | % { $_.Access  }
    ForEach ($ACL in $ACLs){
        $OutInfo = $Folder.Fullname + "," + $ACL.IdentityReference  + "," + $ACL.AccessControlType + "," + $ACL.FileSystemRights + "," + $ACL.IsInherited + "," + $ACL.InheritanceFlags + "," + $ACL.PropagationFlags
        Add-Content -Value $OutInfo -Path $outputCSV
    }
}

但是,由于脚本作为用户的上下文运行,因此该帐户无权访问某些文件夹,因此在 powershell CLI 中吐出我们的错误,说访问被拒绝等。我该如何:

a). Hide it from the Powershell CLI
b). Redirect it to a notepad/txt file log so I still have the information.


+ $Folders = dir $pathToFolders -recurse | where {$_.psiscontainer -eq $true}
+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (F:\SEPM:String) [Get-ChildItem], UnauthorizedAccessException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

Get-ACL : Attempted to perform an unauthorized operation.

它不会使用以下方法将其写入文本文件吗?

4

1 回答 1

2

要重定向错误流,请使用2> filename语法(或2>> filename附加)。

为了演示,让我们使用这个函数:

Function Test {
    Write-Error "Written to stderr"
    Write-Output "Written to stdout"
}

然后,您可以调用Test 2> stderr.log将“Written to stderr”写入文件 stderr.log。您仍然可以重定向stdout,Test 2> stderr.log > stdout.log将“写入stderr”写入stderr.log,将“写入stdout”写入stdout.log。

编辑: 在管道中执行此操作时,请确保在写入错误的管道部分进行重定向。那是,

$Folders = dir $pathToFolders -recurse 2> stderr.log | where {$_.psiscontainer -eq $true},

不是

$Folders = dir $pathToFolders -recurse | where {$_.psiscontainer -eq $true} 2> stderr.log

请注意,这意味着您实际上可以将来自不同命令的错误重定向到不同的错误日志,如果您愿意,$Folders = dir $pathToFolders -recurse 2> dir.err | where {$_.psiscontainer -eq $true} 2> where.err

于 2013-10-21T20:18:52.793 回答