我有一个简单的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
请帮忙。我尝试了很多不同的东西,无法摆脱这种情况。我只想要文件夹名称,没有别的
答案 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;
答案 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 $ _。路径}},所有者,群组