尝试使用此脚本从组列表中删除用户。
不确定我的语言的哪一部分是错的。它不会在ISE中返回错误。我无疑是写自己的PowerShell脚本而不是修改其他人的新手。任何帮助表示赞赏。
Import-Module ActiveDirectory
$group = @('grouopname1','groupname2','groupname3')
$user = "testa"
if ($user.Memberof -like $group)
{
foreach ($user in $group )
{
Remove-ADPrincipalGroupMembership -identity $user -MemberOf $group -confirm:$False
}
}
答案 0 :(得分:1)
在使用PowerShell时,您需要了解的事项是,测试哪种输出和对象会给您带来的非常重要。
$user = "testa" | $user.MemberOf
这会给你一个错误,因为一个字符串没有成员属性" MemberOf"
$user = Get-ADUser testa -Properties MemberOf
这将为您提供一个包含用户" testa"的对象,并且由于默认情况下未检索到MemberOf属性,因此您需要将其添加。
$user.MemberOf
这将返回用户所属的所有组的DistinguishedName,但它不会获得嵌套组...这将需要更多逻辑,但如果您搜索它,则可以找到它。
您的组数组将起作用...如果您对$ user.MemberOf进行替换,以便它只返回公共名称,但您可以轻松地比较DN。但要做到这一点,你需要做这样的事情:
$groups = $group | foreach ($g in $group) { Get-ADGroup $g }
不漂亮,但会让你到那儿。
循环的最后部分可以是这样的:
foreach ($u in ($user.MemberOf))
{
if (($groups.DistinguishedName) -Contains $u)
{
Do-Whatever
}
}
我通常会在循环内部进行测试,使用Write-Host或-WhatIf来验证将要执行的操作。