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。「Written to stderr」を stderr.log に書き込み、「Written to 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 に答える