PS Get/Set-ADGroup 问题接受 variable/object 输入

PS Get/Set-ADGroup issues accepting variable/object input

我正在创建分发列表,并尝试填充广告描述字段。 Set-ADGroup 似乎是该任务的正确 cmdlet,但我在简单脚本中使用它或使用变量传递所需参数或对象时遇到问题。

这个有效:

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 : Cannot find an object with identity: '$GroupDn' under: 'DC=subdomain,DC=domain,DC=tld'. At line:1 char:1 + get-adgroup -Identity '$GroupDn' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: ($GroupDn:ADGroup) [Get-ADGroup], ADIdentityNotFoundException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

$GroupDn 正在存储此对象:

PS D:\Scripts> $groupdn

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

我假设这是因为 Get-ADGroup 需要字符串输入,但我也知道这是 Powershell 和对象,所有这些都是神奇的秘密调味料,但我的面粉糊似乎是块状的,我不见了一些关键点。

那么,字符串输入是我应该在这里处理的吗?如果是这样,正确 将该 DN 转换为字符串的方法是什么?

或者我缺少对象秘诀的哪一部分?

根据要求。

您的代码的问题在于它获得了 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 作为字符串,可以用作其他 AD 命令的 -Identity 参数。

Get-ADGroup 也可以用在另一种语法中,即通过管道传递一个 object。此对象需要至少具有以下属性之一:DistinguishedNameGUIDSIDSamAccountName.

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

使用此语法,您无需设置 Identity 参数。

我也可以这样吹:

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

虽然它似乎仍然不能很好地与不同的域一起使用,但这绝对适用于同一域中的组。为什么 Get-Group | Select DistinguishedNameGet-Group | Get-ADGroup 之类的东西不起作用的关键是使用 Get-Member cmdlet。所以 运行 类似于:

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

应该return像这样:

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

正如您从那里看到的那样,这不是从管道接受到 Get-ADGroup cmdlet 的内容。