尝试比较两个用户 (CopyFromUser) 和 (CopyToUser),获取 (Copytouser) 缺少的组,显示组并选择我要将 (copytouser) 添加到的组。
收到此错误:输入对象无法绑定到命令的任何参数,因为该命令不采用管道输入,或者输入及其属性与采用管道输入的任何参数都不匹配。
有关错误的更多信息:Out-Gridview 可以工作并显示组,我可以选择哪个组,但它不会触发错误 Add-ADgroupmember。
Powershell代码:
$CopyFromUser = Get-ADUser usertest -prop MemberOf
$CopyToUser = Get-ADUser dsstest -prop MemberOf
$MissingGroups = Compare-Object $CopyFromUser $CopyToUser -Property MemberOf | ? SideIndicator -eq '<='
$GroupsObj = $MissingGroups.MemberOf | Get-ADGroup –prop Description | Select Name,Description
$GroupsObj | Out-GridView -PassThru | Add-ADGroupMember -Members $CopyToUser
期望我可以使用 Out-GridView -PassThru 来选择要添加 CopyToUser 的组
出现此问题的原因是您正在使用
Select Name, Description
并且 Add-ADGroupMember
不知道如何处理具有这 2 个属性的管道对象。 您必须保留至少 1 个可以从管道绑定到 的属性-Identity
然后在管道到 Add-ADGroupMember
之前扩展该属性:
此外,您之前的逻辑可以通过使用 Active Directory 过滤器来简化,不需要
Compare-Object
或其他任何东西。 只需查询 AD 中包含 $CopyFromUser
为成员且没有 $CopyFromUser
为成员的群组即可。
$CopyFromUser = (Get-ADUser usertest).DistinguishedName
$CopyToUser = (Get-ADUser dsstest).DistinguishedName
$getADGroupSplat = @{
LDAPFilter = "(&(member=$CopyFromUser)(!member=$CopyToUser))"
Properties = 'Description'
}
Get-ADGroup @getADGroupSplat |
Select-Object Name, Description, DistinguishedName |
Out-GridView -PassThru |
ForEach-Object DistinguishedName |
Add-ADGroupMember -Members $CopyToUser
您的比较应该只比较用户所属的组列表 - 而不是使用属性“MemberOf”的用户对象本身。
这样的东西应该有效:
$CopyFromUser = Get-ADUser -Identity usertest -Properties MemberOf
$CopyToUser = Get-ADUser -Identity destest -Properties MemberOf
$MissingGroups =
Compare-Object $CopyFromUser.MemberOf $CopyToUser.MemberOf |
Where-Object -Property SideIndicator -EQ -Value '<='
$GroupsObj =
$MissingGroups.InputObject |
Get-ADGroup -Properties Description |
Select-Object Name,Description
($GroupsObj |
Out-GridView -PassThru ).Name |
Add-ADGroupMember -Members $CopyToUser