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。此对象需要至少具有以下属性之一:DistinguishedName
、GUID
、SID
或 SamAccountName
.
$GroupObject = Get-Group -Identity "My Group Name"
$GroupObject | Get-ADGroup
使用此语法,您无需设置 Identity
参数。
我也可以这样吹:
Get-Group | % { Get-ADGroup -Identity $_.DistinguishedName }
虽然它似乎仍然不能很好地与不同的域一起使用,但这绝对适用于同一域中的组。为什么 Get-Group | Select DistinguishedName
或 Get-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 的内容。
我正在创建分发列表,并尝试填充广告描述字段。 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。此对象需要至少具有以下属性之一:DistinguishedName
、GUID
、SID
或 SamAccountName
.
$GroupObject = Get-Group -Identity "My Group Name"
$GroupObject | Get-ADGroup
使用此语法,您无需设置 Identity
参数。
我也可以这样吹:
Get-Group | % { Get-ADGroup -Identity $_.DistinguishedName }
虽然它似乎仍然不能很好地与不同的域一起使用,但这绝对适用于同一域中的组。为什么 Get-Group | Select DistinguishedName
或 Get-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 的内容。