Powershell如何以递归方式从文件/目录中获取acls还包括“[”或“]”

时间:2013-12-17 16:00:20

标签: powershell permissions ntfs

我的下面的脚本适用于大多数文件和文件夹,但不适用于带有“[”“]”的文件和文件夹

#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:\Powershell\Results\$filename"
$datelist = "Report Run Time: $date"
$datelist | format-table | Out-File -append "C:\Powershell\Results\$filename"
$spacelist = " "
$spacelist | format-table | Out-File -append "C:\Powershell\Results\$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:\Powershell\Results\$filename"

Get-Acl -path $PSPath | Format-List -property AccessToString | Out-File -append "C:\Powershell\Results\$filename"

"-----------------------" | Out-File -FilePath "C:\Powershell\Results\$filename" -Append

} #end ForEach  

3 个答案:

答案 0 :(得分:4)

我不确定这是100%相同的东西,但我使用以下单行

get-childitem "C:\windows\temp" -recurse | get-acl | Format-List | Out-File "c:\temp\output.txt"

答案 1 :(得分:3)

问题在于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:\Powershell\Results\$filename"

如果您没有PowerShell 3.0版(其中Get-Acl添加了-LiteralPath支持),您可以使用Get-Item作为解决方法:

$item = Get-Item -LiteralPath $PSPath
$item.GetAccessControl() | Format-List -property AccessToString | Out-File -append "C:\Powershell\Results\$filename"

有关详细信息,请参阅此文章:LiteralPaths

答案 2 :(得分:1)

在Powershell V3之前,未添加对get-acl的{​​{1}}支持。

如果您使用的是早期版本,无论出于何种原因无法升级到V3,请使用@ {HAL9256建议literalpath,但对于convert-path部分,这应该适用:

get-acl