GetAccessControl () для каталога с помощью Powershell не возвращает данных - PullRequest
1 голос
/ 23 февраля 2012

У меня есть каталог, имя которого содержит квадратные скобки, что делает обработку в Powershell немного проблематичной.Я видел совет, чтобы получить ACL каталога, вы должны использовать GetAccessControl() метод DirectoryInfo вместо использования командлета Get-Acl.

К сожалению, использование GetAccessControl() не возвращаетлюбые результаты для любого каталога.См. Мой скрипт ниже.

$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 После того, как Энди Арисменди сообщил, что это работает для него, я установил, что GetAccessControl (), кажется, работает нормально на Powershell 2. Уязвимая машина работает Powershell 1Любые идеи, как решить эту проблему с помощью Powershell 1?

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Проблема в квадратных скобках заключается в том, что квадратные скобки являются «глобальными» символами подстановки.Вы можете избежать всего экранирования, используя параметр -literalpath:

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

К сожалению, они не включают параметр -literpath для get-acl, поэтому вы застряли при выполнении get-item, а затем с помощьюметод getaccesscontrol () для получения списка доступа.Get-Acl имеет параметр -literalpath в V3.

0 голосов
/ 23 февраля 2012

Кажется, это работает для меня, хотя свойство Path равно нулю.

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