我正在尝试使用以下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"
}
答案 0 :(得分:0)
您无法以您尝试的方式在管道中进一步发送foreach
的输出;您需要单独导出每个项目。修改过的脚本(请注意,我还修改了where-object
以测试PSIsContainer
返回的每个项目的gci
属性:
$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}
运行上面的脚本,我在CSV的Access
列中看到的只有System.Security.AccessControl.AuthorizationRuleCollection
- 因为这就是所产生的,一个集合。要获取完整 ACL,您需要执行其他处理以提取该集合的每个元素。重复其他也返回集合的字段。