Blog (6)
Komentarze (3)
Recenzje (0)
@blindroodInstalacja Active Directory za pomocą Powershell

Instalacja Active Directory za pomocą Powershell

13.04.2011 22:37, aktualizacja: 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.

Wybrane dla Ciebie
Komentarze (3)