попытка получить все объекты групповой политики, связанные с OU, с помощью команды вызова

У меня есть этот набор кода:

#Find the OU with the selected Canonical name and save it to this variable
$OUObject = Invoke-Command -Session $S -ScriptBlock {Get-ADOrganizationalUnit -filter *  -Property CanonicalName | Where-Object {$_.CanonicalName -eq $using:listBox2.SelectedItem}}

Итак, после этого кода я получаю OU, хранящуюся в переменной $OUObject. Теперь я хочу, чтобы все объекты групповой политики были связаны с этим ou. поэтому мой следующий шаг таков:

$test = $OUObject.LinkedGroupPolicyObjects

и теперь $test содержит все gpos, связанные с его ou. проблема в том, что я хочу получить их по имени. поэтому я могу сделать это:

invoke-command -session $s -scriptblock {get-gpo -guid $test} 

но я получу эту ошибку: PS C:\WINDOWS\system32> invoke-command -session $s -scriptblock {get-gpo -guid $test} Не удается проверить аргумент параметра "Guid". Аргумент нулевой или пустой. Укажите аргумент, который не является нулевым или пустым, а затем повторите команду. + CategoryInfo: InvalidData: (:) [Get-GPO], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationError, Microsoft.GroupPolicy.Commands.GetGpoCommand + PSComputerName: DC01

поэтому я смотрю на $test, и вот что он содержит:

PS C:\WINDOWS\system32> $test
cn={5873971D-F689-4E83-8AFA-389FDD7F34CD},cn=policies,cn=system,DC=bla,DC=local
cn={2B7F8931-038E-46BC-B1DB-FBFA86097C08},cn=policies,cn=system,DC=bla,DC=local
cn={C74CADA1-B609-44A3-8D3C-F733CF3112E2},cn=policies,cn=system,DC=bla,DC=local

так что мне действительно нужно передать команде get-gpo только часть внутри cn{..}

если я жестко кодирую, например, и делаю это:

invoke-command -session $s -scriptblock {get-gpo -guid 5873971D-F689-4E83-8AFA-389FDD7F34CD} 

я получаю правильный результат. может ли кто-нибудь помочь мне достичь этого, пожалуйста?


person Shahar Weiss    schedule 26.05.2020    source источник
comment
это был мой тип. если я выполню {get-gpo -guis $using:test}, я получу ошибку, потому что посмотрите на $test, мне нужно как-то подстроить его и передать, мне нужно вырезать первую часть cn= и перед },cn =поли...   -  person Shahar Weiss    schedule 26.05.2020


Ответы (1)


Используйте оператор регулярного выражения -replace для извлечения GUID из DN, затем передайте значение Invoke-Command с помощью модификатора $using::

$GUIDs = $test -replace '^cn=(\{[0-9a-f-]+\}).*$'
Invoke-Command -Session $s { $using:GUIDs |ForEach-Object { Get-GPO -Guid $_ } }
person Mathias R. Jessen    schedule 26.05.2020