【发布时间】:2019-07-23 03:02:14
【问题描述】:
运行此脚本时收到以下错误:
Get-ADGroupMember:无法将“System.Object[]”转换为类型 参数所需的“Microsoft.ActiveDirectory.Management.ADGroup” '身份'。不支持指定的方法。
此外,用户从 Win7 组移动到 Win10 组,但取决于他们是否是 if 语句中其他组的成员,if 语句中的任何组都不会为任何用户移动。请帮忙。
仅供参考,用户列表文件在文本文件中包含 Active Directory 用户名,如下所示:
jsmith
ksmith
etc.
grouplist 文本文件包含如下 Active Directory 组:
Nitro7
Project7
Visio7
Zoom7
SnagIt7
OneNote7
代码:
Import-Module ActiveDirectory
$users = Get-Content -Path .\userlist.txt
$group = Get-Content -Path .\grouplist.txt
$members = Get-ADGroupMember -Identity $group -Recursive
foreach ($user in $users){
Remove-ADGroupMember -Identity "Win7" -Members $user -Confirm:$false -Verbose
Add-ADGroupMember -Identity "Win10" -Members $user -Confirm:$false -Verbose
If ($members.SamAccountName -contains $user) {
Remove-ADGroupMember -Identity "Nitro7" -Members $user -Confirm:$false -Verbose
Add-ADGroupMember -Identity "Nitro10" -Members $user -Confirm:$false -Verbose
}
If ($members.SamAccountName -contains $user) {
Remove-ADGroupMember -Identity "Project7" -Members $user -Confirm:$false -Verbose
Add-ADGroupMember -Identity "Project10" -Members $user -Confirm:$false -Verbose
}
If ($members.SamAccountName -contains $user) {
Remove-ADGroupMember -Identity "OneNote7" -Members $user -Confirm:$false -Verbose
Add-ADGroupMember -Identity "OneNote10" -Members $user -Confirm:$false -Verbose
}
If ($members.SamAccountName -contains $user) {
Remove-ADGroupMember -Identity "Zoom7" -Members $user -Confirm:$false -Verbose
Add-ADGroupMember -Identity "Zoom10" -Members $user -Confirm:$false -Verbose
}
If ($members.SamAccountName -contains $user) {
Remove-ADGroupMember -Identity "SnagIt7" -Members $user -Confirm:$false -Verbose
Add-ADGroupMember -Identity "SnagIt10" -Members $user -Confirm:$false -Verbose
}
If ($members.SamAccountName -contains $user) {
Remove-ADGroupMember -Identity "Visio7" -Members $user -Confirm:$false -Verbose
Add-ADGroupMember -Identity "Visio10" -Members $user -Confirm:$false -Verbose
}
}
【问题讨论】:
-
$members 是什么样子的?看起来 $members 应该类似于...$members = foreach ($g in $groups) {Get-ADGroupMember -Identity $group.someproperty}
-
我不确定你的意思? $members 只是脚本顶部定义的一个变量。
-
我认为
m0lochwalker是在询问 $Var 的内容结构是什么。你用一组集合来调用它的代码......文档说[-Identity] <ADGroup>......并且该参数值是一个组,而不是组集合。 -
Lee,我没有正确使用 grouplist.txt 来收集组吗?
-
@Jeff - 要将您的消息发送给特定的人,请使用
@和他们的名字,就像您这样做时出现的那样。 [grin] ///// 是的,正如m0lochwalker指出的那样,您使用的 cmdlet 不正确 ...您使用了一个文档明确声明您的集合必须有一项。m0lochwalker发布的示例代码看起来在调整以适合您的数据源文件时可以工作。
标签: powershell active-directory