2014-01-10 1 views
0

У меня есть следующий код, чтобы найти всех пользователей, которые являются членами группы локальных администраторов сервера, из данного списка серверов. Может ли кто-нибудь посоветовать лучший способ изменить это, чтобы я мог искать только одно конкретное имя пользователя в списке серверов?Powershell - найти и опционально удалить пользователя в группе локальных администраторов на нескольких серверах

В дополнение к этому, может кто-то добавить немного необязательного кода для удаления именованного пользователя из группы локальных администраторов, если они обнаружены в нем?

Мы ищем способы очистить группу после того, как проекты завершили строительство и настройку продукции. Серверы, до того, как эти серверы будут жить.

$SERVERS = GC .\HOST.TXT 

FOREACH ($C in $Servers) { 
WRITE-HOST $c 
[string]$strComputer = $c 
$computer = [ADSI]("WinNT://" + $strComputer + ",computer") 
$Group = $computer.psbase.children.find("Administrators") 
$members= $Group.psbase.invoke("Members") | %{$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)} 

foreach($user in $members) 
{ 
$objUser = [ADSI]("WinNT://$strComputer/$user") 
[string]$output = $strComputer + "," + $user + "," + $objUser.SchemaClassName + "," + $ObjUser.Description 
write-host $output 
$output |out-file -append .\L_out.txt 
Remove-Variable objUser 
} 
} 

ответ

0

Добавить, если заявление на поиск строки вы желаете, а затем поставить некоторые введенные пользователем на него, чтобы удалить, если пользователь вводит «Да»

if ($user -eq "****INSERT USER NAME HERE****") { 
    if (Read-Host -Prompt "Delete user? (Yes/No)" -like "yes") { 
     Remove-ADUser -Identity $user -Server $C    
    } 
} 

Это должно быть в вашем foreach($user in $members) { блоке

+0

более упрощенными могут быть: $ name = read-host "user?"; $ members = $ Group.psbase.invoke ("Участники") | % {$ _. GetType(). InvokeMember («Имя», «GetProperty», $ null, $ _, $ null)} | ? {$ _ -like $ name} | удалить-ADUser –

Смежные вопросы