PS Get / Set-ADGroup接受变量/对象输入的问题

时间:2019-03-08 19:38:12

标签: powershell active-directory exchange-server distribution-list

我正在创建通讯组列表,并尝试填充“广告描述”字段。 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:在以下位置找不到标识为“ $ GroupDn”的对象:   'DC =子域,DC =域,DC = tld'。在第1行:char:1   + get-adgroup-身份'$ 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转换为字符串的正确方法是什么?

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

1 个答案:

答案 0 :(得分:1)

我也可以像这样发送管道:

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

应返回如下内容:

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

从那里您可以看到,这不是从管道进入Get-ADGroup cmdlet的范围。