下面的脚本适用于大多数文件和文件夹,但不适用于带有"["]"的文件和文件夹
#Set variables
$path = $args[0]
$filename = $args[1]
$date = Get-Date
#Place Headers on out-put file
$list = "Permissions for directories in: $Path"
$list | format-table | Out-File "C:PowershellResults$filename"
$datelist = "Report Run Time: $date"
$datelist | format-table | Out-File -append "C:PowershellResults$filename"
$spacelist = " "
$spacelist | format-table | Out-File -append "C:PowershellResults$filename"
#Populate Folders Array
[Array] $folders = Get-ChildItem -path $path -force -recurse
#Process data in array
ForEach ($folder in [Array] $folders)
{
#Convert Powershell Provider Folder Path to standard folder path
$PSPath = (Convert-Path $folder.pspath)
$list = ("Path: $PSPath")
$list | format-table | Out-File -append "C:PowershellResults$filename"
Get-Acl -path $PSPath | Format-List -property AccessToString | Out-File -append "C:PowershellResults$filename"
"-----------------------" | Out-File -FilePath "C:PowershellResults$filename" -Append
} #end ForEach
我不确定这能做100%相同的事情,但我使用的是下面的一行
get-childitem "C:windowstemp" -recurse | get-acl | Format-List | Out-File "c:tempoutput.txt"
问题在于Convert-Path
cmdlet试图"解释"路径,包括它"解释"为通配符的方括号。相反,您希望使用文字路径。
更改此行:
$PSPath = (Convert-Path $folder.pspath)
对此:
$PSPath = (Convert-Path -LiteralPath $folder.pspath)
另外,将Get-Acl -path
更改为Get-Acl -LiteralPath
,使其看起来像这样:
Get-Acl -LiteralPath $PSPath | Format-List -property AccessToString | Out-File -append "C:PowershellResults$filename"
如果您没有PowerShell 3.0版(其中添加了Get-Acl-LiteralPath支持),您可以使用Get-Item作为解决方法:
$item = Get-Item -LiteralPath $PSPath
$item.GetAccessControl() | Format-List -property AccessToString | Out-File -append "C:PowershellResults$filename"
有关更多信息,请参阅本文:LiteralPaths
get-acl
对literalpath
的支持直到Powershell V3才添加。
如果您一直在使用早期版本,并且由于任何原因无法升级到V3,请使用@HAL9256建议convert-path
,但对于get-acl
部分,这应该有效:
((Get-Item -LiteralPath $PSPath).GetAccessControl()).AccessToString | Out-File -append "C:PowershellResults$filename"
我对@peter的一行进行了轻微的更改。它大大加快了速度:
获取子项"C: \windows\temp"-文件夹-递归|get-acl |导出CSV"c: \temp\output.csv"-nottype-附加