Я не могу заставить работать функцию Powershell StartsWith - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь создать скрипт Powershell, который распечатывает только определенные группы AD из настроек разрешений папки.Однако по какой-то причине Powershell не распознает функцию StartsWith.

("C:\folder" | get-acl).Access | ForEach-Object { if (($_.IdentityReference).StartsWith("sl_test")) { continue }; $_ }

Когда я запускаю это, я получаю ошибки, подобные этим для каждого объекта foreach:

Ошибка вызова метода, потому что [System.Security.Principal.NTAccount] не содержит метод с именем «StartsWith».В C: \ temp \ test.ps1: 1 char: 56 + («C: \ folder» | get-acl). Доступ |ForEach-Object {if (($ _. IdentityReference) .St ... + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: MethodNotFound

Есть предложения о том, как заставить это работать?

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Попробуйте:

Get-Acl -Path "C:\folder" | Select-Object -ExpandProperty Access | Where-Object {$_.IdentityReference -like "sl_test*" }

Вы можете настроить выход с дополнительным | Select-Object -Property XY

0 голосов
/ 05 марта 2019

Если вы хотите получить строковое представление IdentityReference (независимо от того, является ли он объектом NTAccount или SID), вы можете ссылаться на свойство Value:

$_.IdentityReference.Value.StartsWith('sl_test')
0 голосов
/ 05 марта 2019

IdentityReference - это [System.Security.Principal.NTAccount] в соответствии с вашим сообщением об ошибке.

Но .StartWith - это метод типа String.Если вы вызываете метод, Powershell не делает для вас никакой магии, AFAIK.

Попробуйте ... ($_.IdentityReference) -match "^sl_test" ..., что должно сделать неявное преобразование строки.

...