使用通配符删除本地管理员的域组

时间:2016-04-25 19:02:00

标签: powershell

我正在尝试清理某些计算机上的本地管理员组,并需要Powershell中的解决方案。到目前为止,我已经设法检索成员列表,但我的语法有问题,无法找到我要删除的组。需要删除的每台计算机上的组将不同,但具有相同的名称格式。

如果组名相同,我可以使用它:

$objGroup = [ADSI]("WinNT://$Env:COMPUTERNAME/Administrators")
$objGroupMembers = $objGroup.psbase.Invoke("Members") | foreach {$_.GetType().InvokeMember("Name", 'GetProperty',$null, $_, $null)}
$objRemoveGroup = [ADSI]("WinNT://Contoso/ABC-MyAdmins")
$objGroup.PSBase.Invoke("Remove",$objRemoveGroup.PSBase.Path)

但我需要移除的组将被删除,可以命名为XYZ-MyAdmins或ABC-XYZ-MyAdmins。基本上我只想删除本地管理员组中任何类似* -MyAdmins的成员。

所以,如果我做这样的事情,它就不起作用了:

$objGroup = [ADSI]("WinNT://$Env:COMPUTERNAME/Administrators")
$objGroupMembers = $objGroup.psbase.Invoke("Members") | foreach {$_.GetType().InvokeMember("Name", 'GetProperty',$null, $_, $null)}
$ObjRemove = ForEach($Member in ($objGroupMembers | Where-Object {$Member -like '*-MyAdmins'}))
{
$objRemoveGroup = [ADSI]("WinNT://Contoso/$($ObjRemove)")
$objGroup.PSBase.Invoke("Remove",$objRemoveGroup.PSBase.Path)
}

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我想我只需要发一个问题就可以自己解决这个问题。我仍然想知道我的原始代码有什么坏处,但如果有人有时间看看我会很感激。我还在学习PowerShell的细节。

这可以根据需要运作:

 $objGroup = [ADSI]("WinNT://$Env:COMPUTERNAME/Administrators")
 $objGroupMembers = $objGroup.psbase.Invoke("Members") | foreach {$_.GetType().InvokeMember("Name", 'GetProperty',$null, $_, $null)}
        ForEach($Member in $objGroupMembers)
        {
            If($Member -like "*-MyAdmins")
            {$objRemoveGroup = [ADSI]("WinNT://Contoso/$($Member)")
             $objGroup.PSBase.Invoke("Remove",$objRemoveGroup.PSBase.Path)}
        }