Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Instalacja Active Directory za pomocą Powershell

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|1k0w4n3Proste 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. 

windows inne

Komentarze

0 nowych
nnick   3 #1 13.04.2011 22:05

Dzięki wielkie, akurat mi się ten artykuł przyda w najbliższym czasie!

tfl   8 #2 14.04.2011 17:44

powershell to ogromna moc. szkoda, ze tak ogromnie niedoceniana, zwlaszcza przed zwolennikow basha.