首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell如何以递归方式从文件/目录中获取acls,还包括"[“或”"]“”

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

Stack Overflow用户
提问于 2013-12-18 00:00:20
回答 3查看 49.1K关注 0票数 3

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

代码语言:javascript
运行
复制
#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  
EN

回答 3

Stack Overflow用户

发布于 2014-04-23 22:35:13

我不确定这是否做了100%相同的事情,但我使用了以下一行代码

代码语言:javascript
运行
复制
get-childitem "C:\windows\temp" -recurse | get-acl | Format-List | Out-File "c:\temp\output.txt"
票数 7
EN

Stack Overflow用户

发布于 2013-12-18 00:56:40

问题在于Convert-Path cmdlet试图“解释”路径,包括它“解释”为通配符的方括号。相反,您希望让它使用文字路径。

更改此行:

代码语言:javascript
运行
复制
$PSPath = (Convert-Path $folder.pspath)

要这样做:

代码语言:javascript
运行
复制
$PSPath = (Convert-Path -LiteralPath $folder.pspath)

此外,将Get-Acl -path更改为Get-Acl -LiteralPath,使其如下所示:

代码语言:javascript
运行
复制
Get-Acl -LiteralPath $PSPath | Format-List -property AccessToString | Out-File -append "C:\Powershell\Results\$filename"

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

代码语言:javascript
运行
复制
$item = Get-Item -LiteralPath $PSPath
$item.GetAccessControl() | Format-List -property AccessToString | Out-File -append "C:\Powershell\Results\$filename"

有关更多信息,请参阅本文:LiteralPaths

票数 4
EN

Stack Overflow用户

发布于 2013-12-19 05:48:16

直到Powershell V3才添加对literalpathget-acl支持。

如果你坚持使用早期版本,并且由于某种原因无法升级到V3,请使用@HAL9256对convert-path的建议,但对于get-acl部分,这应该会起作用:

代码语言:javascript
运行
复制
((Get-Item -LiteralPath $PSPath).GetAccessControl()).AccessToString | Out-File -append "C:\Powershell\Results\$filename"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20638869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档