Instalacja Active Directory za pomocą Powershell
13.04.2011 | aktual.: 04.02.2012 18:01
Załóżmy że jesteśmy studentami informatyki i rozpoczynamy zajęcia poświęcone administracji systemów Windows Server. Na początku poznajemy dostępne role, później je konfigurujemy i zarządzamy nimi. Na laboratorium mamy komputery z maszynami wirtualnymi. Niestety komputery są skonfigurowane jako "Time machine" tzn. po każdym restarcie wracają do pewnych domyślnych ustawień i tracimy naszą pieczołowicie wykonaną konfigurację. Jeśli, na ten przykład, mamy kilka zajęć z Active Directory, podczas których poznajemy coraz to więcej opcji i narzędzi, to każde zajęcia zaczynają się od zainstalowania i skonfigurowania roli oraz dodania standardowych kont itp. Moim pomysłem jest przygotowanie skryptów w języku Powershell, które skonfigurują maszynę za nas. Wtedy laboratorium wyglądałoby tak:
Laboratorium pierwsze - instalujemy i konfigurujemy domenę, dodajemy użytkowników itp. Laboratorium drugie - uruchamiamy skrypt, który w kilka chwil wykona za nas laboratorium pierwsze i poznajemy głębiej Active Directory. Laboratorium trzecie - uruchamiamy skrypt, który w kilka chwil wykona za nas laboratorium drugie i poznajemy jeszcze głebiej Active Directory.
Szkoda czasu na powtarzanie tego samego co tydzień.
Na pierwszy ogień poszła automatyzacja instalacji wspomnianej wcześniej roli Active Directory. W Powershellu nie ma narzędzi pozwalających ją skonfigurować. W 2008 R2 możemy zainstalować rolę Active Directory Domain Services - Domain Controller (ADDS-Domain-Controller):
Import-Module ServerManager Add-WindowsFeature ADDS-Domain-Controller
jednak nie skonfigurujemy jej żadnym poleceniem typowo "powershellowskim". W systemie Windows Server 2008 oraz w 2008 R2(w poprzednich także) należy wykorzystać polecenie konsolowe dcpromo. Najłatwiejszym sposobem skorzystania z tego polecenia jest wykorzystanie tzw. answerfile, pliku odpowiedzi, który wskaże aplikacji dcpromo jak zainstalować i skonfigurować domenę Active Directory.
Napiszemy więc prosty skrypt instalujący domenę Active Directory, gdzie jedynymi parametrami będzie nazwa domeny oraz hasło domenowe. Podstawowy plik answerfile instalujący nową domenę zawiera w sobie następujące parametry:
[DCINSTALL] ReplicaOrNewDomain=Domain NewDomain=forest NewDomainDNSName=nazwa.domeny.local DomainNetbiosName=nazwa InstallDNS=yes SafeModeAdminPassword=Jakies_H4Sł0 RebootOnCompletion=yes
Nazwę domeny oraz hasło przekażemy w parametrach funkcji. Nazwę NETBios trzeba sobie samemu wygrzebać. String w .NET posiada metodę Split, która podzieli nam napis na tablicę podnapisów wg separatorów, które mu podamy w parametrze.
$NETBios = ($Name.Split(@('.')))[0]
Powyższy kod, podzieli nam zmienną $Name na podnapisy. Znakiem rozdzielającym będzie kropka a do zmiennej $NETBios przypisujemy pierwszy element tak powstałej tablicy. W przypadku gdy $Name = "nazwa.domeny.local" to w zmiennej $NETBios będziemy mieli "nazwa".
Nasza funkcja będzie generowała plik answerfile, który posłuży do instalacji ActiveDirectory. Zauważmy, że do tego pliku będziemy zapisywać hasło domeny(oups!). Na szczęście Microsoft nie w ciemię bity i po wykonaniu dcpromo z tego pliku hasło usunie, ale trzeba pamiętać aby zawsze po sobie posprzątać. Jeśli więc zostawimy przełącznik RebootOnCompletion na yes to wszystkie kolejne operacje jakie byśmy chcieli wykonać zostaną przerwane i serwer się zrestartuje. W naszej funkcji więc tę opcję wyłączymy, usuniemy plik i dopiero potem zrestartujemy komputer.
No to do dzieła:
function Install-NewAD { param( [Parameter(Mandatory=$true)]$Name, [Parameter(Mandatory=$true)]$Password ) $NETBios = ($Name.Split(@('.')))[0] $answerfile = "[DCINSTALL]`n ReplicaOrNewDomain=Domain`n NewDomain=forest`n NewDomainDNSName=$Name`n DomainNetbiosName=$NETBios`n InstallDNS=yes`n SafeModeAdminPassword=$Password`n RebootOnCompletion=no" $answerfile | Out-File "answerfile.ini" try{ dcpromo /answer:answerfile.ini } catch { Write-Host "To nie jest system umożliwiający instalację Active Directory" return } Remove-Item (Join-Path (Get-Location) answerfile.ini) Restart-Computer }
Przykładowe zastosowanie funkcji:
Install-NewAD -Name mydomain.net -Password Sk0mp|1k0w4n3
Proste prawda? Oczywiście pominięta została walidacja podawanych parametrów (może w wolnej chwili dopiszę) W następnym poście opiszę instalację kolejnej roli.