2015-04-01 40 views
0

尝试让此脚本从组列表中删除用户。使用Powershell从组列表中删除用户

不知道我的语言的哪一部分是错误的。它不会在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 
    } 
} 

回答

1

在使用PowerShell时需要了解的一点是测试输出和对象会给你什么样的输出非常重要。

$user = "testa" | $user.MemberOf 

这将会给你一个错误,因为字符串没有一个成员属性“成员”

$user = Get-ADUser testa -Properties MemberOf 

这会给你一个包含用户“种皮”的对象,而且由于的memberOf属性不是默认检索,你需要将它添加英寸

$user.MemberOf 

这将返回该用户是其成员的所有组的distinguishedName来,但它不会让嵌套组...那个呃d需要更多的逻辑,但是如果你搜索它,你会发现它。

您的组数组将工作...如果您在$ user.MemberOf上进行了替换,以便它只返回通用名称,但您可以轻松地比较这些DN。然而,要做到这一点,你需要做这样的事情:

$groups = $group | foreach ($g in $group) { Get-ADGroup $g } 

不漂亮,但它会让你那里。

循环的最后一部分可以是这样的:

foreach ($u in ($user.MemberOf)) 
{ 
    if (($groups.DistinguishedName) -Contains $u) 
    { 
     Do-Whatever 
    } 
} 

我一般会用在循环内部测试开始,使用直写式主机或-WhatIf验证刚刚发生了什么事情要做。

+1

谢谢,这真的很有帮助。现在运行! – squirreladmin 2015-04-01 18:13:26

+0

很高兴你明白了。我早期使用PowerShell学到的一件事是验证您的对象是什么类型,然后如何格式化输出。 – mortenya 2015-04-01 20:31:03

+0

是的,我刚拿起这本书“在30天的午餐时间学习PowerShell”,我已经下载了一个课程。但是在现场做事,学习什么有效,什么不行,总是非常有用。很高兴有互联网上有帮助的人,虽然!再次感谢。 – squirreladmin 2015-04-02 17:29:24