Temat jaki jest – każdy widzi. Pytanie pojawia się, jak szybko i sprawnie poradzić sobie z tematem, gdy do grupy lokalnych Administratorów trzeba dodać użytkownika na….50…100 serwerach? I to już zaraz natychmiast, bo Wasz ukochany management budzi sie po pół roku błogiego nieróbstwa i nagle mówi: backupujemy!!!! Monitorujemy!!! I agenci muszą być!!! I wszystko ma być proaktywne, zarządzane, ładnie wyglądające, a do tego jeszcze narysować piękny wykres i mailem w papierowej kopercie wysłać! Najlepiej przyniesionym na srebrnej tacy przez piękną panią asystentkę…
Wracając do tematu: metod jest dużo. Najwygodniej chyba skryptem, prawda? Poniżej kawałek kodu w PowerShellu, który pozwoli Wam, moi Drodzy Czytelnicy dodać użytkownika/grupę domenową do dowolnej liczby serwerów.
Należy w skrypcie podać nazwę swojej domeny, zapisać go jako plik z rozrzeszeniem ps1. Następnie zrzucić do pliku listę komputerów, na których zmiana zostanie dokonana. Z konsoli powershelowej/cmd proszę uruchomić następnie wspomniany skrypt, podać nazwę użytkownika, który ma zostać dodany oraz ścieżkę do pliku z listą komputerów. I gotowe.
function ListAdministrators($Group)
{
$members= $Group.psbase.invoke("Members") | %{$_.GetType().InvokeMember("Name", ‘GetProperty’, $null, $_, $null)}
$members
}
function Ping-Server {
Param([string]$srv)
$pingresult = Get-WmiObject Win32_PingStatus -Filter "Address=’$srv’"
if($pingresult.StatusCode -eq 0) {$true} else {$false}
}
if ($args.Length -ne 2) {
Write-Host "`tUsage: "
Write-Host "`t`t d:\script.ps1 netbackupsql d:\computers.txt"
Write-Host "`t`tExample: .\AddToLocalAdmin.ps1 netbackupsql d:\computers.txt"
return
}
#Your domain, change this
$domain = "Twoja_DOMENA"
#Get the user to add
$username = $args[0]
#File to read computer list from
$strComputers = Get-content $args[1]
foreach ($strComputer in $strComputers)
{
if (Ping-Server($strComputer)) {
$computer = [ADSI]("WinNT://" + $strComputer + ",computer")
$Group = $computer.psbase.children.find("administrators")
# This will list what’s currently in Administrator Group so you can verify the result
write-host -foregroundcolor green "====== $strComputer BEFORE ====="
ListAdministrators $Group
write-host -foregroundcolor green "====== BEFORE ====="
# Even though we are adding the AD account
# It is being added to the local computer and so we will need to use WinNT: provider
$Group.Add("WinNT://" + $domain + "/" + $username)
write-host -foregroundcolor green "====== $strComputer AFTER ====="
ListAdministrators $Group
write-host -foregroundcolor green "====== AFTER ====="
}
else
{
write-host -foregroundcolor red "$strComputer is not pingable"
}
}
Wynik działania skryptu:
Skrypt nie jest odkrywczy i w założeniu nie miał taki być. Ale dobrze wiedzieć, gdzie go szukać, że działa poprawnie i spełnia podstawowe założenia funkcjonalne.