0

次の powershell スクリプトを取得して、結果を .csv に出力しようとしています。.csv ファイルが作成されましたが、データがありません。何が間違っていますか?

$rootfolder = Get-ChildItem -recurse -Path [PATH] | where {$_.Attributes -eq 'Directory'} 
foreach ($userdir in $rootfolder) { 
$userdir.FullName 
get-acl $userdir.FullName | foreach {write-host "The owner is : " $_.Owner -Foregroundcolor Green } | export-csv c:\powershell\test.csv
Write-Host "`n" 
} 
4

1 に答える 1

0

foreach試みている方法でパイプラインのさらに出力を送信することはできません。各アイテムを個別にエクスポートする必要があります。改訂されたスクリプト (によって返される各アイテムwhere-objectのプロパティをテストするように修正したことに注意してください):PSIsContainergci

$rootfolder = Get-ChildItem -recurse -Path [path] | where {$_.PSIsContainer} 
foreach ($userdir in $rootfolder) { 
get-acl -path $userdir.FullName | export-csv c:\powershell\test.csv -NoTypeInformation -Append
}

ただし、結果にはがっかりされると思います。get-acl基本的な文字列のコレクションではなく、オブジェクトのコレクションを生成します。たとえばget-acl、プロファイル ディレクトリで実行すると、次のようになります。

PS C:\Users\ME> get-acl .|select-object access|fl *


Access : {System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule,
         System.Security.AccessControl.FileSystemAccessRule}

上記のスクリプトを実行するAccessと、CSV の列に表示さSystem.Security.AccessControl.AuthorizationRuleCollectionれるのはコレクションだけです。完全なACLを取得するには、追加の処理を行って、そのコレクションの各要素を引き出す必要があります。コレクションを返す他のフィールドについても繰り返します。

于 2013-05-20T13:21:14.307 に答える