Microsoft.PowerShell.Core \ FileSystem - 导出为CSV

时间:2014-07-09 15:13:38

标签: powershell csv powershell-v2.0

我有一个简单的Powershell命令,显示共享列表和ACL。我无法让CSV显示:路径列中的Microsoft.PowerShell.Core \ FileSystem。我在这里阅读了很多其他帖子,但我似乎仍然无法使用它。这是我的代码:

get-childitem \\olympus\dfs\departments | get-acl  | select-object path,owner,group | export-csv “C:\security.csv” 

我的输出显示:

路径 Microsoft.PowerShell.Core \文件系统:: \奥林巴斯\ DFS \部门\ Proformance

请帮忙。我尝试了很多不同的东西,无法摆脱这种情况。我只想要文件夹名称,没有别的

3 个答案:

答案 0 :(得分:1)

因此,创建一个属性,使用PSPath属性作为基础,并获取一个删除前38个字符的子字符串( Microsoft.PowerShell.Core \ FileSystem :: 部分)。

get-childitem \\olympus\dfs\departments | get-acl  | select-object @{l="path";e={$_.PSPath.substring(38,$_.PSPath.Length-38)}},owner,group | export-csv “C:\security.csv” 

好的,因此包含来自Access属性的东西会使事情复杂化,因为它是一个数组,所以现在基本上你希望每个文件最有可能包含几行,以列出所有有权访问的用户/组。这将遍历每个文件/文件夹的ACL的Access组。它只列出了具有访问权限的结果,但您可以通过删除|?{$_.AccessControlType -eq "Allow"}部分来更改结果,但老实说这可能是您关心的。

gci 'C:\Program Files' | get-acl  | %{$Acl=$_
    $_.Access|?{$_.AccessControlType -eq "Allow"}|Select -Unique IdentityReference|%{[PSCustomObject][Ordered]@{
        "Path"=$ACL.PSPath.substring(38,$Acl.PSPath.Length-38)
        "Owner"=$ACL.Owner
        "Group"=$ACL.Group
        "Access"=$_.IdentityReference
        }
    }
}

这将为您提供如下结果:

Path                                                 Owner                                                Group                                                Access                                              
----                                                 -----                                                -----                                                ------                                              
C:\Program Files\7-Zip                               NT AUTHORITY\SYSTEM                                  NT AUTHORITY\SYSTEM                                  NT SERVICE\TrustedInstaller                         
C:\Program Files\7-Zip                               NT AUTHORITY\SYSTEM                                  NT AUTHORITY\SYSTEM                                  NT AUTHORITY\SYSTEM                                 
C:\Program Files\7-Zip                               NT AUTHORITY\SYSTEM                                  NT AUTHORITY\SYSTEM                                  BUILTIN\Administrators                              
C:\Program Files\7-Zip                               NT AUTHORITY\SYSTEM                                  NT AUTHORITY\SYSTEM                                  BUILTIN\Users                                       
C:\Program Files\7-Zip                               NT AUTHORITY\SYSTEM                                  NT AUTHORITY\SYSTEM                                  CREATOR OWNER                                       
C:\Program Files\Application Verifier (x64)          NT AUTHORITY\SYSTEM                                  NT AUTHORITY\SYSTEM                                  NT SERVICE\TrustedInstaller                         
C:\Program Files\Application Verifier (x64)          NT AUTHORITY\SYSTEM                                  NT AUTHORITY\SYSTEM                                  NT AUTHORITY\SYSTEM                   

答案 1 :(得分:0)

尝试使用Select-Object命令创建“计算属性”。

get-childitem \\olympus\dfs\departments | get-acl  | select-object @{Name = 'Path'; Expression = { ($_.PSPath -split '::')[1] }; };,owner,group | export-csv "c:\security.csv";

这是一个可以在任何典型的干净Windows计算机上运行的工作示例:

Get-ChildItem -Path 'c:\Program Files' | Get-Acl | Select-Object -Property @{ Name = 'Path'; Expression = { (.PSPath -split '::')[1]; } },Owner,Group;

Screenshot

答案 2 :(得分:0)

有许多方法可以删除PowerShell路径以实现预期的结果。这是一个使用自定义标头(对象)和Convert-Path cmdlet的示例,它将Windows PowerShell路径转换为Windows PowerShell提供程序路径;在这种情况下,FileSystem提供程序具有更简洁的名称。

Get-ChildItem \ olympus \ dfs \ departments | Get-Acl | Select-Object @ {n =" Path&#34 ;; e = {Convert-Path $ _。路径}},所有者,群组