2016-04-25 2 views
1

Я пытаюсь очистить группу локальных администраторов на некоторых машинах и нуждаюсь в решении в Powershell. Пока мне удалось получить список участников, но у меня возникли проблемы с моим синтаксисом, чтобы найти группу, которую я хочу удалить. Группа на каждой машине, которая нуждается в удалении, будет отличаться, но имеет тот же формат имени.Удалить группу домена для локальных администраторов с использованием wild card

я мог бы использовать это, если имя группы было то же самое:

$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) 
} 

Что я здесь делаю неправильно?

ответ

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)} 
     } 
Смежные вопросы