PS Get / Set-ADGroup проблемы принятия ввода переменных / объектов - PullRequest
0 голосов
/ 08 марта 2019

Я создаю списки рассылки и пытаюсь заполнить поле описания AD.Set-ADGroup представляется правильным командлетом для этой задачи, однако у меня возникают проблемы с его использованием в простом сценарии или с помощью переменной для передачи необходимых параметров или объектов.

Это работает:

Get-ADGroup -Identity "CN=My Group Name,OU=Distribution,OU=Groups,DC=subdomain,DC=domain,DC=tld"

Но это не так:

$GroupDn = Get-Group -Identity "My Group Name" | Select-Object DistinguishedName
Get-ADGroup -Identity $GroupDn

И происходит сбой с этой ошибкой:

get-adgroup: Не удается найти объект с идентификатором: '$GroupDn 'под:' DC = поддомен, DC = домен, DC = tld '.В строке: 1 символ: 1 + get-adgroup -Identity '$ GroupDn' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo: ObjectNotFound: ($ GroupDn: ADGroup) [Get-ADGroup], ADIdentityNotFoundException + FullyQualifiedErrorId: ActiveDirectoryCmdlet: Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException, Microsoft.ActiveDirectory. 101 * *G2GroupDn хранит этот объект:

PS D:\Scripts> $groupdn

DistinguishedName
-----------------
CN=My Group Name,OU=Distribution,OU=Groups,DC=subdomain,DC=domain,DC=tld

Я предположил, что это потому, что Get-ADGroup ожидает ввода строки, но я также знаю, что это Powershell и объекты и все, что является магией, секретным соусом, но мойПохоже, что Roux комковатый, и я упускаю какой-то ключевой момент.

Итак, нужно ли здесь обрабатывать строковый ввод?Если да, то как правильный способ получить это DN в строку?

Или какую часть секретного соуса объекта мне не хватает?

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Мне также удалось написать так:

Get-Group | % { Get-ADGroup -Identity $_.DistinguishedName }

Кажется, что он все еще плохо работает с разными доменами, но это определенно будет работать для групп в одном домене. Ключ к тому, почему что-то вроде Get-Group | Select DistinguishedName или Get-Group | Get-ADGroup не работает, заключается в использовании командлета Get-Member. Так работает что-то вроде:

Get-Group | Get-Member
Get-Group | Select DistinguishedName | Get-Member

Должен вернуть что-то вроде этого:

TypeName: Deserialized.Microsoft.Exchange.Data.Directory.Management.WindowsGroup
TypeName: Selected.System.Management.Automation.PSCustomObject

И как вы можете видеть, это не то, что будет принято из конвейера в командлет Get-ADGroup.

1 голос
/ 12 марта 2019

По запросу.

Проблема с вашим кодом в том, что он получает искаженное имя как PSCustomObject со свойством под названием «DistinghuishedName», где вы действительно хотите получить это свойство как String .

Если вы измените это на (используя Exchange Get-Group):

$GroupDn = Get-Group -Identity "My Group Name" | Select-Object -ExpandProperty DistinguishedName

или (используя ActiveDirectory Get-ADGroup):

$GroupDn = Get-ADGroup -Identity "My Group Name" | Select-Object -ExpandProperty DistinguishedName

Переменная $GroupDn будет содержать только DistinghuishedName группы в виде строки, которую можно использовать в качестве параметра -Identity для других команд AD.

Get-ADGroup также можно использовать в синтаксисе другого типа, а именно, передавая объект через конвейер. Этот объект должен иметь хотя бы одно из следующих свойств: DistinguishedName, GUID, SID или SamAccountName.

$GroupObject = Get-Group -Identity "My Group Name"
$GroupObject | Get-ADGroup

Используя этот синтаксис, вам не нужно устанавливать параметр Identity.

...