使用Powershell的目录上的GetAccessControl()不返回任何数据

时间:2012-02-23 16:04:40

标签: powershell acl directory powershell-v1.0

我有一个名字包含方括号的目录,使得在Powershell中处理它有点问题。我已经看到了获取目录ACL的建议,您应该使用GetAccessControl()的{​​{1}}方法,而不是使用cmdlet DirectoryInfo

不幸的是,使用Get-Acl并未返回任何目录的任何结果。请参阅下面的我的脚本。

GetAccessControl()

空ACL的意思是:

$filename = "C:\somefolder"
$di = get-item $filename
$di | get-acl    # this returns the correct ACL data as expected
$di.GetAccessControl()   # this shows an empty ACL (see below output)

我发现使用包含方括号的目录名来获取$ di实例的唯一方法是使用双反斜杠转义括号

Path      Owner      Access
----      -----      ------

如果我这样做然后执行$filename = "C:\some``[folder``]withsquarebrackets" $di = get-item $filename会显示它包含指定文件夹的详细信息。但在这种情况下,其余两行返回不同的结果:

$di

任何人都可以解释我如何可靠地获取ACL的枚举文件夹,其中一些文件夹的名称中包含方括号?

更新2012-02-23 16:31Z 在Andy Arismendi报告它为他工作之后,我确定GetAccessControl()似乎在Powershell 2上工作正常。受影响的机器运行Powershell 1.任何想法如何使用Powershell 1来解决这个问题?

2 个答案:

答案 0 :(得分:1)

方括号问题是因为方括号是“通配”通配符。您可以使用-literalpath参数来避免所有转义:

$di = get-item -literalpath C:\some[folder]withsquarebrackets
$di.getaccesscontrol()

不幸的是,他们没有为get-acl包含-literpath参数,所以你坚持做get-item,然后使用getaccesscontrol()方法来获取访问列表。 Get-Acl在V3中确实有一个-literalpath参数。

答案 1 :(得分:0)

虽然Path属性为null,但似乎对我有用。

$f = Get-Item 'C:\some `[folder`]'
$f.GetAccessControl()
$f.GetAccessControl().Access