Powershell: Ersten DC im Forest hochstufen
Hallo an alle,
nachdem ich einiges an Arbeit investiert habe um das Skript zu bauen dachte ich mir das vielleicht einer von eich das auch brauchen könnte. Da ich nicht der Powershell Guru bin bin ich natürlich über Vorschläge zur Verbesserung und Erweiterung gerne offen und dankbar.
Was macht das Skript?
1) Anpassen des Computernamens
2) Anpassen der Netzwerkkarteneinstellungen -> IP,Subnet, DNS
3) Installieren der benötigten Features
4) Erstellen des Forest und hochstufen des Servers zum 1 DC im Forest
5) Erstellen einer DNS Reverse Lookup Zone und setzen des Pointers
Ausführung des Skripts:
Ich habe es unter Server 2012 und R2 getestet. Immer mit dem lokalen Admin und es hat problemlos funktioniert.Beide Skriptdatein müssen im gleichen Verzeichnis sein!
Als erstes eine Powershell Sitzung öffnen und
ausführen. Dann können die Skripts problemlos ausgeführt werden.
Das Skript holt sich automatisch die erhöhten Rechte der Powershell. Ausserdem führt es auch alle benötigten Neustarts von selber aus. Daher benötigt man auch die Eingabe des Adminpasswortes damit der AutoLogin danch funkt. Nach dem Ende des Skripts werden alle Einträge aus der Registry gelöscht die zuvor erstellt wurden.
Datei1: CreateCD.ps1
Datei2: functions.ps1 -> Habe ich selber aus dem Internet. Hoffe das macht jetzt keine Probleme oder ist ein Verstoß gegen Regeln. Schreibe heute zum ersten Mal sowas.
Autor: Lasse W und hier findet Ihr den Artikel http://www.codeproject.com/Articles/223002/Reboot-and-Resume-PowerShell ...
Ich hoffe das ich wem damit helfen kann.
lg
nachdem ich einiges an Arbeit investiert habe um das Skript zu bauen dachte ich mir das vielleicht einer von eich das auch brauchen könnte. Da ich nicht der Powershell Guru bin bin ich natürlich über Vorschläge zur Verbesserung und Erweiterung gerne offen und dankbar.
Was macht das Skript?
1) Anpassen des Computernamens
2) Anpassen der Netzwerkkarteneinstellungen -> IP,Subnet, DNS
3) Installieren der benötigten Features
4) Erstellen des Forest und hochstufen des Servers zum 1 DC im Forest
5) Erstellen einer DNS Reverse Lookup Zone und setzen des Pointers
Ausführung des Skripts:
Ich habe es unter Server 2012 und R2 getestet. Immer mit dem lokalen Admin und es hat problemlos funktioniert.Beide Skriptdatein müssen im gleichen Verzeichnis sein!
Als erstes eine Powershell Sitzung öffnen und
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Das Skript holt sich automatisch die erhöhten Rechte der Powershell. Ausserdem führt es auch alle benötigten Neustarts von selber aus. Daher benötigt man auch die Eingabe des Adminpasswortes damit der AutoLogin danch funkt. Nach dem Ende des Skripts werden alle Einträge aus der Registry gelöscht die zuvor erstellt wurden.
Datei1: CreateCD.ps1
param($Step="A")
# -------------------------------------
# Imports
# -------------------------------------
$script = $myInvocation.MyCommand.Definition
$scriptPath = Split-Path -parent $script
. (Join-Path $scriptpath functions.ps1)
$Comuptername="DC1"
$Domainname="contoso"
$DomainTLD="loc"
$IPAdresse = "192.168.1.1"
$IPSubnetmask = 24
$IPGareway="192.168.1.1"
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Write-Host "Administrationsrehte werden angefordert!"
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
Clear-Any-Restart
if (Should-Run-Step "A")
{
Write-Host "Schritt 1 von 3 ... Ausführung beginnt" -ForegroundColor Yellow
Write-Host "Mit diesem Skript können Sie einen neuen Server 2012 hochstufen und konfigurieren"
Write-Host "Das Skript wird nach einen etwaigen Neustart fortgesetzt!"
Write-Host "Unterbrechungen des Skriptes bewirken das Sie die konfigurationen selber durchführen müssen"
Write-Host "Umfang:
Zuweisen einer statischen IP auf der primären Netzwerkkarte
Umbenennen des PC
Neustart des PC
Hochstufen zu DC
Neustart des PC
Korrigieren der Netzwerkkarteneinstellungen
Erstellen der DNS Reverse Lookupzone
Erstellen des Pointers in der Reverse Lookupzone" -ForegroundColor Yellow
$StartScript = Read-Host "Wollen Sie diese Aufgaben durchführen? J/N (default=N)"
#Wenn die Eingabe J ist wird das Skript gestartet
if($StartScript -eq "J")
{
Write-Host "Ausführung gestartet" -ForegroundColor Yellow
#Benötigte Werte abfragen
#Wird für den Autologin benötigt
$AdminPW = Read-Host "Bitte geben Sie das Kennwort des lokalen Kontos Administrator an:"
#Der zukünftige Computername (Hostname)
$Comuptername=Read-Host "Bitte geben Sie den neuen Namen des Computers ein:"
#Der Netbiosname des Forest
$Domainname=Read-Host "Bitte geben Sie den Netbiosnamen der Domain ein:"
#Die TLD des Forest
$DomainTLD=Read-Host "Bitte geben Sie die TLD für Ihre Domain ein:"
#Die IP-Adresse die er erste Netzwerkadapter bekommen soll
$IPAdresse = Read-Host "Welche IP Adresse soll Ihr DC haben?"
#Die Subnetmaske die für den Adapter gültig ist
$IPSubnetmask = Read-Host "Geben Sie die Subnetmask in CIDR ein:"
#Der Gateway
$IPGareway = Read-Host "Geben Sie den Standardgateway ein:"
#Wird benötigt für AD Recovery
$SafePassword = Read-Host "Geben Sie bitte das Passwort für AD Recovery ein:"
#Sicherheitsabfrage ob die Eingaben korrekt sind
$CanStart = "N"
$CanStart= Read-Host "Sind Ihre Eingaben korrekt? (J/N)"
#Wenn korrekt dann beginnt die Ausführung
if($CanStart -eq "J")
{
#Netzwerkkarte korrigieren
Write-Host "Netzwerkeinstellungen werde vorgenommen"
Write-Host "Primärer Netzwerkadapter wird ermittlet"
$PrimaryNetworkAdapter = Get-NetAdapter
Write-Host "Netzwerkeinstellungen werde Netzwerkadapter übergeben"
New-NetIPAddress -IPAddress $IPAdresse -InterfaceAlias $PrimaryNetworkAdapter.Name -PrefixLength $IPSubnetmask -DefaultGateway $IPGareway
Write-Host "DNSeinstellungen werde vorgenommen"
Set-DnsClientServerAddress -InterfaceAlias $PrimaryNetworkAdapter.Name -ServerAddresses $IPAdresse
#Computer umbennen
Write-Host "Computer wird umbenannt"
Rename-Computer -ComputerName localhost -NewName $Comuptername
#Wichtige Werte für den Neustart in der Reg speichern
Write-Host "Registrierungswerte werden geschrieben"
Set-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "Domainname" $Domainname
Set-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "TLD" $DomainTLD
Set-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "PWD" $SafePassword
Set-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "AdminPW" $AdminPW
Set-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "IPAdresse" $IPAdresse
Set-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "Subnet" $IPSubnetmask
Set-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "Gateway" $IPGareway
#Autologon vorbereiten
Write-Host "Autologon wird vorbereitet"
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name DefaultUserName -Value "Administrator"
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name DefaultPassword -Value $AdminPW
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoAdminLogon -Value "1"
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name ForceAutoLogon -Value "1"
#Logdaten schreiben
$featureLogPath = "c:\Fameix\featurelog.txt"
New-Item $featureLogPath -ItemType file -Force
Write-Host "Benötigte Features werden installiert"
$addsTools = "RSAT-AD-Tools"
Add-WindowsFeature $addsTools
Get-WindowsFeature | Where installed >>$featureLogPath
#Computer neu starten
Write-Host "Computer wird neu gestartet"
Restart-And-Resume $script "B"
}
else
{
Exit
}
}
else
{
Write-Host "Ausführung unterbrochen"
Exit
}
Restart-And-Resume $script "B"
}
if (Should-Run-Step "B")
{
Write-Host "Daten werden ausgelesen und Features installiert!!! Bitte warten !!! Das Script schreitet automatisch fort!!!!" -ForegroundColor Yellow
#Benötigte Werte auslesen aus der Reg
Write-Host "Lese aus: Domainname" -ForegroundColor Yellow
$Domainname = Get-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "Domainname"
Write-Host "Lese aus: TLD" -ForegroundColor Yellow
$DomainTLD = Get-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "TLD"
Write-Host "Lese aus: Safepasswort" -ForegroundColor Yellow
$SafePassword = Get-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "PWD"
Write-Host "Lese aus: AdminPW" -ForegroundColor Yellow
$pwd = ConvertTo-SecureString $SafePassword -AsPlaintext -Force
$AdminPW = Get-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "AdminPW"
$DomainFQDN = $Domainname + "." + $DomainTLD
#Benötugte Features installieren
$featureLogPath = "c:\Fameix\featurelog.txt"
Write-Host "Installiere Features" -ForegroundColor Yellow
start-job -Name addFeature -ScriptBlock {
Add-WindowsFeature -Name "ad-domain-services" -IncludeAllSubFeature -IncludeManagementTools
Add-WindowsFeature -Name "dns" -IncludeAllSubFeature -IncludeManagementTools
Add-WindowsFeature -Name "gpmc" -IncludeAllSubFeature -IncludeManagementTools }
Wait-Job -Name addFeature
Get-WindowsFeature | Where installed >>$featureLogPath
#Benötigte Module laden
Write-Host "Lade Module ADDSDeployment" -ForegroundColor Yellow
Import-Module ADDSDeployment
#Forst erstellen
Write-Host "Forest wird erstellt! Bitte warten ..." -ForegroundColor Yellow
Install-ADDSForest -CreateDnsDelegation: $false `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "Win2012" `
-DomainName $DomainFQDN `
-DomainNetbiosName $Domainname `
-ForestMode "Win2012" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$true `
-SysvolPath "C:\Windows\SYSVOL" `
-SafeModeAdministratorPassword $pwd `
-Force: $true
#Neustart
#Ausführung beendet
Write-Host "Neustart wird durchgeführt" -ForegroundColor Yellow
Restart-And-Resume $script "C"
}
if (Should-Run-Step "C")
{
Write-Host "C"
Write-Host "Netzwerkeinstellungen werde vorgenommen"
#Primäre Netzwerkkarte ermitteln
Write-Host "Ermittle Netzwerkadapter" -ForegroundColor Yellow
$PrimaryNetworkAdapter = Get-NetAdapter
#Daten aus der Reg auslesen
Write-Host "Lese aus: IPAdresse" -ForegroundColor Yellow
$IPAdresse = Get-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "IPAdresse"
Write-Host "Lese aus: Subnetmaske" -ForegroundColor Yellow
$IPSubnetmask= Get-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "Subnet"
Write-Host "Lese aus: Gateway" -ForegroundColor Yellow
$IPGareway = Get-Key "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "Gateway"
Write-Host "Lese aus: Domainname" -ForegroundColor Yellow
#DNS EInstellungen berichtigen
Write-Host "Setze DNS Server neu auf Netzwerkadapter" -ForegroundColor Yellow
Set-DnsClientServerAddress -InterfaceAlias $PrimaryNetworkAdapter.Name -ServerAddresses $IPAdresse
#IPAdresse splitten
$SplitIP = $IPAdresse.Split(".")
$ReverseIP = $SplitIP[2] + "." + $SplitIP[1] + "." + $SplitIP + ".in-addr.arpa"
#DNSServer festlegen
$DNSServer = "localhost"
#Reversezone festlegen
Write-Host "Erstelle Reverse Lookup Zone" -ForegroundColor Yellow
dnscmd $DNSServer /zoneadd $ReverseIP /DSprimary
dnscmd /config $ReverseIP /allowupdate 1
#Eintrag setzen
$DomainRoot = Get-ADDomain
Write-Host "Erstelle Pointer für DC" -ForegroundColor Yellow
dnscmd localhost /RecordAdd $ReverseIP $SplitIP[3] PTR ($env:computername + "." + $DomainRoot.DNSRoot)
#Registry aufräumen
Write-Host "Lösche aus Registry: Domainname" -ForegroundColor Yellow
Remove-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "Domainname"
Write-Host "Lösche aus Registry: TLD" -ForegroundColor Yellow
Remove-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "TLD"
Write-Host "Lösche aus Registry: Passwort" -ForegroundColor Yellow
Remove-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "PWD"
Write-Host "Lösche aus Registry: Admin Passwort" -ForegroundColor Yellow
Remove-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "AdminPW"
Write-Host "Lösche aus Registry: IPAdresse" -ForegroundColor Yellow
Remove-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "IPAdresse"
Write-Host "Lösche aus Registry: Subnetmaske" -ForegroundColor Yellow
Remove-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "Subnet"
Write-Host "Lösche aus Registry: Gateway" -ForegroundColor Yellow
Remove-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" "Gateway"
#Autologon beenden
Write-Host "Beende Auto Login" -ForegroundColor Yellow
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name DefaultUserName -Value "Administrator"
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name DefaultPassword -Value ""
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoAdminLogon -Value "0"
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name ForceAutoLogon -Value "0"
#Ausführung beendet
Read-Host "Script erfolgreich ausgeführt.
Bitte testen Sie die Einstellungen.
Beliebige Taste zum Beenden"
}
Datei2: functions.ps1 -> Habe ich selber aus dem Internet. Hoffe das macht jetzt keine Probleme oder ist ein Verstoß gegen Regeln. Schreibe heute zum ersten Mal sowas.
Autor: Lasse W und hier findet Ihr den Artikel http://www.codeproject.com/Articles/223002/Reboot-and-Resume-PowerShell ...
# -------------------------------------
# Function Globals
# -------------------------------------
$global:started = $FALSE
$global:startingStep = $Step
$global:restartKey = "Restart-And-Resume"
$global:RegRunKey ="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
$global:powershell = (Join-Path $env:windir "system32\WindowsPowerShell\v1.0\powershell.exe")
# -------------------------------------
# Collection of Utility functions.
# -------------------------------------
function Should-Run-Step([string] $prospectStep)
{
if ($global:startingStep -eq $prospectStep -or $global:started) {
$global:started = $TRUE
}
return $global:started
}
function Wait-For-Keypress([string] $message, [bool] $shouldExit=$FALSE)
{
Write-Host "$message" -foregroundcolor yellow
$key = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
if ($shouldExit) {
exit
}
}
function Test-Key([string] $path, [string] $key)
{
return ((Test-Path $path) -and ((Get-Key $path $key) -ne $null))
}
function Remove-Key([string] $path, [string] $key)
{
Remove-ItemProperty -path $path -name $key
}
function Set-Key([string] $path, [string] $key, [string] $value)
{
Set-ItemProperty -path $path -name $key -value $value
}
function Get-Key([string] $path, [string] $key)
{
return (Get-ItemProperty $path).$key
}
function Restart-And-Run([string] $key, [string] $run)
{
Set-Key $global:RegRunKey $key $run
Restart-Computer
exit
}
function Clear-Any-Restart([string] $key=$global:restartKey)
{
if (Test-Key $global:RegRunKey $key) {
Remove-Key $global:RegRunKey $key
}
}
function Restart-And-Resume([string] $script, [string] $step)
{
Restart-And-Run $global:restartKey "$global:powershell $script -Step $step"
}
Ich hoffe das ich wem damit helfen kann.
lg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 272323
Url: https://administrator.de/contentid/272323
Ausgedruckt am: 13.11.2024 um 06:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo @Pageman262,
erst einmal vielen Dank für deinen Beitrag.
Folgende Anmerkung:
Grüße @colinardo
erst einmal vielen Dank für deinen Beitrag.
Folgende Anmerkung:
Datei2: functions.ps1 -> Habe ich selber aus dem Internet. Hoffe das macht jetzt keine Probleme oder ist ein Verstoß gegen Regeln. Schreibe heute zum ersten Mal sowas.
Bei solchen Sachen wenn's geht bitte immer den Urheber bzw. die Quelle(URL) des Quellcodes nennen. Der Functions-Code ist jetzt zwar nicht weltbewegendes, trotzdem solltest du es beherzigen.Grüße @colinardo