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



我正在尝试清理某些计算机上的本地管理员组,需要在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)
}

我在这里做错了什么?

我想

我只需要发布一个问题就可以自己解决这个问题。我仍然想知道我的原始代码有什么问题,所以如果有人有时间看一下,我将不胜感激。我仍在学习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)}
        }

最新更新