7. November 2016 Aleksej Kusnir

Windows Server 2016 Automatisiertes Deployment in Hyper-V mit Powershell, AD Join und Netzwerkkonfiguration.

Hi,

musst du auch für deine Testzwecke immer wieder ein Windows Server 2016 in Hyper-V erstellen und du hast kein SCVMM laufen?

Dann möchte ich dir hier eine Variante beschreiben, wie du diese Aufgabe super einfach mit Powershell erledigst. Powershell und djoin ermöglichen dir zudem, das der Server in die Domäne automatisch aufgenommen wird.

Dazu nutze Ich die neue Powershell Technick: Powershell Direct.

Mit Powershell Direct kannst du deine Windows Server 2016 VM bearbeiten, auch wenn du keine Netzwerkkarte konfiguriert hast.

Bevor du aber loslegen kannst, muss dun noch 3 Dinge beachten.

  1. Du musst ein Windows Server 2016 oder Windows 10 installiert haben auf dennen Hyper-V löuft.
  2. Du musst ein Windows 2016 Template erstellten. Sprich ein VHD Datei die ein gesyspreptes Windows Server 2016 enthält.
  3. Du hast ein Domaincontroller. Wenn du kein hast, kannst du die Maschine nicht automatisch als Domän Mitglied erstellen.

Sobal du das alles hast, kannst du loslegen.

Daszu loggt du dich auf deinem Hyper-V server ein und führst die Powershell Befehle aus.

Hier ist ein Skript das ich erstellt habe, mit dem eine Windows Server 2016 VM erstellt wird.

Das Skript führt folgende Tätigkeiten aus.

  1. Es erstellt ein Ordner unter C:\temp // In diesem Ordner wird die Djoin datei für die VM abgelegt.
  2. Es wird eine VM in der Generation 1 erstellt
  3. Es wird ein Windows 2016 VHD Template in den Zielordner der VM kopiert.
  4. Die VHD Datei wird der erstellten VM als Boot Laufwerk zugeordnet.
  5. Mit djoin wird der Server zu der Domäne hinzugefügt.
  6. Die DJOIN Datei VMNAME.txt wird vom Domänencontroller in den Ordner C:\temp kopiert.
  7. Die Netzwerkkonfiguration der VM wird durchgeführt.
  8. Die DJOIN Datei wird von C:\temp in die neue VM kopiert.
  9. Die DNSServer Einstelllungen werden in der VM konfiguriert.
  10. Die VM wird in die Domäne mithilder der DJOIN Datei aufgenommen.

Um das Skript zu nutzen müsst ihr folgende Parameter verwenden.

PS:> autoWS2016RTMDeployment.ps1 -VMName „VMNAME“ -IP „xxx.xxx.xxx.xxx“ -IPDomaincontroller „xxx.xxx.xxx.xxx“ -SourceVHDXPath „Pfad wo die VHD Tempalte Datei liegt“ -TargetVMPath „Pfad wo die VM erstellt werden soll“ -localadminpassword „passwort“ -domainname „Domainname.local“ -domainaccount „domainname\domainadmin“ -domainaccountpassword „domainadmin passwort“

 

######################################################################################
# #
# #
# Dieses Script erstellt automatisch einen oder mehrere Windows Server 2016 TP5 #
# Datacenter FULL (Mit GUI) VM #
# #
# Die VMs werden automatisch Konfiguriert und in die Domäne LI.local aufgenommen #
# #
# Die Firwall wird augeschaltet und ein RDS Zugang wird erlaubt #
# #
# Standart: 4 VMS #
# #
######################################################################################

#################################### BEISPIEL #########################################
# #
# #
# .\autoWS2016Deployment.ps1 -VMName "testVM01" -IP "xxx.xxx.xxx.xxx" #
# -IPDomaincontroller "xxx.xxx.xxx.xxx" -SourceVHDXPath "V:\Template\Virtual Hard Disks" #
# -TargetVMPath "V:\VMs\" #
# #
# #
# # 
# #
# #
# #
#######################################################################################################


[CMdletBinding()]
Param(
[Parameter(MAndatory=$True)]
[string]$VMName,
[Parameter(Mandatory=$True)]
[string]$IP,
[Parameter(Mandatory=$True)]
[string]$IPDomaincontroller,
[Parameter(Mandatory=$True)]
[string]$SourceVHDXPath,
[Parameter(Mandatory=$True)]
[string]$TargetVMPath,
[Parameter(Mandatory=$True)]
[string]$localadminpassword,
[Parameter(Mandatory=$True)]
[string]$domainname,
[Parameter(Mandatory=$True)]
[string]$domainaccount,
[Parameter(Mandatory=$True)]
[string]$domainaccountpassword
)

# Create New VM Generation 1 with a IDE HDD

$savefile= "C:\temp\$VMName.txt"
$NewMaskBits = 24
$NewIPType = "IPv4"

New-Item -Path "C:\temp" -ItemType "Directory"

Write-Host $VMName
Write-Host $savefile
$DestinationVMPath=$TargetVMPath+$VMName
$DestinationVHDXFILE=$TargetVMPath+$VMName+"\Virtual Hard Disks\WS2016RTM.vhdx"


Write-Host "Create VM $VMName" -BackgroundColor Black -ForegroundColor White
New-VM -Name $VMName -MemoryStartupBytes 2GB -SwitchName Mgmt -Path $TargetVMPath -Generation 1

Write-Host "Copy VHD..." -BackgroundColor Black -ForegroundColor Green
Copy-item $SourceVHDXPath -Destination $DestinationVMPath -Recurse

Write-Host "Attach VHD..." -BackgroundColor Black -ForegroundColor Green
Add-VMHardDiskDrive -VMName $VMName -ControllerType IDE -ControllerNumber 0 -Path $DestinationVHDXFILE

Write-Host "Configure Virtual Machine..." -BackgroundColor Black -ForegroundColor Green
Set-VM -Name $VMName -DynamicMemory -MemoryMaximumBytes 4GB -MemoryMinimumBytes 512MB -MemoryStartupBytes 1GB -ProcessorCount 2

$bootdevicenetwork=(Get-VMFirmware -VMName $VMName).BootOrder[0]
$bootdevicevhdx=(Get-VMFirmware -VMName $VMName).BootOrder[1]

Set-VMFirmware -VMName $VMName -BootOrder $bootdevicevhdx,$bootdevicenetwork

Write-Host "Startup Virtual Machine: $VMName..." -BackgroundColor Black -ForegroundColor Green
Start-VM -Name $VMName

Start-Sleep -Seconds 60

Write-Host "Start Konfiguration for: $VMName..." -BackgroundColor Black -ForegroundColor Red
# Computer Account in Domäne Erstellen und djoin Files Kopieren

# Erlaub Remote auf DC zuzugreifen
set-item wsman:\localhost\Client\TrustedHosts -Value $IPDomaincontroller -Force

# Erstelle die Crediantials für den Domänencontroller
$domainpassword=ConvertTo-SecureString -String $domainaccountpassword -AsPlainText -Force
$domainCred= New-Object System.Management.Automation.PSCredential ("linetwork\Administrator", $domainpassword)
$DC1= New-PSSession -ComputerName $IPDomaincontroller -Credential $domainCred


# Erstelle in AD eine djoin Datei für ein Offline Domänenbeitrag füt die VM
Invoke-Command -VMName "DC-01" -ScriptBlock { New-Item -Path "C:\temp" -ItemType "Directory" } -Credential $domainCred -ArgumentList $savefile
Invoke-Command -VMName "DC-01" -ScriptBlock { djoin /provision /domain $args[0] /machine $args[1] /savefile $args[2] /REUSE } -Credential $domainCred -ArgumentList $domainname, $VMName, $savefile
# Kopiere die djoin Datei aus dem DC
Copy-Item -FromSession $DC1 -Path "C:\Temp\$VMName.txt" -Destination "C:\temp"

# Ertelle Crediantals für den Lokalen Administrators der VMs
$localpassword=ConvertTo-SecureString -String $localadminpassword -AsPlainText -Force
$localCred= New-Object System.Management.Automation.PSCredential (".\Administrator", $localpassword)

Invoke-Command -VMName $VMName -ScriptBlock { Get-NetAdapter | ? {$_.Status -eq "up"} | New-NetIPAddress -AddressFamily $args[0] -IPAddress $args[1] -PrefixLength $args[2] } -Credential $localCred -ArgumentList $NewIPType, $IP, $NewMaskBits

Start-Sleep -Seconds 10

set-item wsman:\localhost\Client\TrustedHosts -Value $IP -Force
$VMCred= New-PSSession -ComputerName $IP -Credential $localCred

Invoke-Command -VMName $VMName -ScriptBlock { mkdir "c:\temp" } -Credential $localCred
Copy-Item -ToSession $VMCred -Path "C:\Temp\$VMName.txt" -Destination "C:\temp"

Invoke-Command -VMName $VMName -ScriptBlock { Get-NetAdapter | ? {$_.Status -eq "up"} | Set-DnsClientServerAddress -ServerAddresses $IPDomaincontroller -InterfaceAlias "Ethernet 2" } -Credential $localCred

Invoke-Command -VMName $VMName -ScriptBlock { djoin /requestodj /loadfile $args[0] /windowspath "C:\Windows" /localos } -Credential $localCred -ArgumentList $savefile

Invoke-Command -VMName $VMName -ScriptBlock { netsh advfirewall set allprofiles state off } -Credential $localCred

Invoke-Command -VMName $VMName -ScriptBlock { set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -name "UserAuthentication" -Value 1 } -Credential $localCred

Invoke-Command -VMName $VMName -ScriptBlock { shutdown -r -t 0 } -Credential $localCred

Fazit:

In diesem Bloggartikel hast du gesehen, das man für die Erstellung von Windows Server 2016 als VM sehr schln Powershell nutzen kann.

Ich hoffe der artikel war für dich Interessant und du konntest etwas mitnehmen.

Gerne würde ich über ein kurzes Kommentar freuen, vorallem Interessiert mich ob du auch schon Powershell für das Deployment von VMs nutzt?

Viel Spass und alles gute.

Aleksej

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Sie haben eine Frage oder möchten Sie ein Angebot zu einem unserer Seminare?