0

我正在创建分发列表,并尝试填充 AD 描述字段。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:在“DC=subdomain,DC=domain,DC=tld”下找不到标识为“$GroupDn”的对象。在 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 和对象,所有这一切都是神奇的秘诀,但我的 roux 似乎是块状的,我错过了一些关键点。

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

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

4

2 回答 2

1

我也能够像这样进行管道传输:

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

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

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-ADGroupcmdlet 所接受的。

于 2019-03-14T04:05:29.127 回答
1

按照要求。

您的代码的问题在于,它使用名为“DistinghuishedName”的属性将可分辨名称作为PSCustomObject获取,您确实希望在其中将该属性作为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也可以用在另一种类型的语法中,即通过管道传递一个对象。此对象需要至少具有以下属性之一:DistinguishedNameGUID或。SIDSamAccountName

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

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

于 2019-03-12T07:56:17.353 回答