2

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

不幸的是, usingGetAccessControl()不会为任何目录返回任何结果。请参阅下面的脚本。

$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)

我所说的空 ACL 的意思是:

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

我发现获得具有包含方括号的目录名称的 $di 实例的唯一方法是用双反引号转义括号

$filename = "C:\some``[folder``]withsquarebrackets"

如果我这样做然后执行$di = get-item $filename,则$di表明它包含指定文件夹的详细信息。但在这种情况下,其余两行会返回不同的结果:

$di | get-acl     # does nothing, doesn't even show an empty ACL
$di.GetAccessControl()   # shows an empty ACL as seen above

谁能解释我如何可靠地获取用于枚举文件夹的 ACL,其中一些文件夹的名称中包含方括号?

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

4

2 回答 2

1

Path尽管该属性为空,但它似乎对我有用。

$f = Get-Item 'C:\some `[folder`]'
$f.GetAccessControl()
$f.GetAccessControl().Access
于 2012-02-23T16:15:13.540 回答
1

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

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

不幸的是,它们没有包含用于 get-acl 的 -literpath 参数,因此您只能使用 get-item,然后使用 getaccesscontrol() 方法来获取访问列表。Get-Acl 在 V3 中确实有一个 -literalpath 参数。

于 2012-02-23T18:49:34.950 回答