#Erstellt von Stephan Meier, Klassik-Stiftung-Weimar

#prfung ob script bereits ausgefhrt wurde

$regpath = Test-Path -Path "HKLM:\Software\KSW-HV-Install"
if ("$regpath" -eq "False") 
    {
    New-Item -Path "HKLM:\Software\KSW-HV-Install" 
    set-ItemProperty -Path "HKLM:\SOFTWARE\KSW-HV-Install" InstallStep -Value 0 Force
    set-ItemProperty -Path "HKLM:\SOFTWARE\KSW-HV-Install" HVHostname -Value (Read-Host "Servername eingeben ") Force
    net user Administrator Passw0rd
    }


#Variablen setzen

$installstep=get-ItemProperty -Path "HKLM:\SOFTWARE\KSW-HV-Install" InstallStep
$ServerName=get-ItemProperty -Path "HKLM:\SOFTWARE\KSW-HV-Install" HVHostname
$ipv4manageipaddress=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).management)
$ipv4managesubnetbit=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).managenetmask)
$ipv4dns1=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).DNS1)
$ipv4dns2=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).DNS2)
$ipv4managegateway=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).Gateway)
$ipv4csvipaddress=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).csv)
$ipv4csvnetpaskbit=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).csvnetmask)
$ipv4livemigipaddress=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).Livemigration)
$ipv4livemigipsubnetbit=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).Livemigrationnetmask)
$ipv4backupipaddress=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).Backup)
$ipv4backupsubnetbit=((Import-Csv C:\Blade\bladeliste.csv | Where-Object {$_.Servername -eq $ServerName.HVHostname} ).Backupnetmask)


#Schritt 0 Autologon einschalten
if ($InstallStep.installstep -eq 0)
    {
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" AutoAdminLogon -Value 1 Force
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" DefaultDomainName -Value .\ Force
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" DefaultUserName -Value Administrator Force
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" DefaultPassword -Value Passw0rd Force
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" DisableCAD -Value 1 Force
    set-ItemProperty -Path "HKLM:\SOFTWARE\KSW-HV-Install" InstallStep -Value 1 Force
    Restart-Computer
    }

elseif ($InstallStep.installstep -eq 1)
    {
    Rename-Computer -NewName $ServerName.HVHostname
    Add-WindowsFeature Multipath-IO
    Add-WindowsFeature Failover-Clustering -IncludeManagementTools
    Add-WindowsFeature Hyper-V -IncludeManagementTools
    set-ItemProperty -Path "HKLM:\SOFTWARE\KSW-HV-Install" InstallStep -Value 2 Force
    Restart-Computer
    }

elseif ($InstallStep.installstep -eq 2)
    {
    $nicteam = Get-NetAdapter -Physical | Where-Object {$_.Status -eq "UP" }
    New-NetLbfoTeam -Name TEAM -TeamMembers $nicteam.Name -TeamingMode Static -LoadBalancingAlgorithm HyperVPort -Confirm:$false
    Start-Sleep -s 10
    
    #prfen ob Switch bereits erstellt ist und neuen Switch erstellen wenn bentigt
    $existswitch=Get-VMSwitch
    if ($existswitch.Name -lt "Extensible") 
        {
        write-host "Es wird ein Extesible Switch erstellt"
        New-VMSwitch Extensible -MinimumBandwidthMode weight -NetAdapterName Team -AllowManagementOS $false
        Set-VMSwitch Extensible -DefaultFlowMinimumBandwidthWeight 10
        
        #anlegen der Netzwerkkarten
     
        write-host "Erstellen der ntigen Netzwerkkarten"
        Add-VMNetworkAdapter -ManagementOS -Name Manage -SwitchName Extensible
        Set-VMNetworkAdapter -ManagementOS -Name Manage -MinimumBandwidthWeight 10
        Add-VMNetworkAdapter -ManagementOS -Name CSV -SwitchName Extensible
        Set-VMNetworkAdapter -ManagementOS -Name CSV -MinimumBandwidthWeight 30
        Add-VMNetworkAdapter -ManagementOS -Name Livemigration -SwitchName Extensible
        Set-VMNetworkAdapter -ManagementOS -Name Livemigration -MinimumBandwidthWeight 10
        Add-VMNetworkAdapter -ManagementOS -Name Backup -SwitchName Extensible
        Set-VMNetworkAdapter -ManagementOS -Name Backup -MinimumBandwidthWeight 10
        Start-Sleep -s 30
        }
    #IP Adressen vergeben
    write-host "IP Adressen fr die neu angelegten Netzwerkkarten werden vergeben"
    New-NetIPAddress -InterfaceAlias vEthernet (Manage) -IPAddress $ipv4manageipaddress -PrefixLength $ipv4managesubnetbit -DefaultGateway $ipv4managegateway
    Set-DnsClientServerAddress -InterfaceAlias vEthernet (Manage) -ServerAddresses  $ipv4dns2','$ipv4dns1
    New-NetIPAddress -InterfaceAlias vEthernet (CSV) -IPAddress $ipv4csvipaddress -PrefixLength $ipv4csvnetpaskbit
    New-NetIPAddress -InterfaceAlias vEthernet (Livemigration) -IPAddress  $ipv4livemigipaddress -PrefixLength $ipv4livemigipsubnetbit
    New-NetIPAddress -InterfaceAlias vEthernet (Backup) -IPAddress $ipv4backupipaddress -PrefixLength $ipv4backupsubnetbit 
    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" RequireSecureNegotiate -Value 0 Force
    
    #Zuordnung zu VLAN
    write-host "Virtuelle Netzwerkkarten werden den VLAN's zugeordnet"
    Set-VMNetworkAdapterVlan -ManagementOS -VMNetworkAdapterName "CSV" -Access -VlanId 13
    Set-VMNetworkAdapterVlan -ManagementOS -VMNetworkAdapterName "Livemigration" -Access -VlanId 14
    Set-VMNetworkAdapterVlan -ManagementOS -VMNetworkAdapterName "Backup" -Access -VlanId 21
    
    #IPV6 deaktivieren
    write-host "TCP/IP v6 wird deaktiviert"
    Set-NetAdapterBinding -name "vEthernet (Livemigration)" -ComponentID ms_tcpip6 -Enabled $false
    Set-NetAdapterBinding -name "vEthernet (CSV)" -ComponentID ms_tcpip6 -Enabled $false
    Set-NetAdapterBinding -name "vEthernet (Manage)" -ComponentID ms_tcpip6 -Enabled $false
    Set-NetAdapterBinding -name "vEthernet (Backup)" -ComponentID ms_tcpip6 -Enabled $false
    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" RequireSecureNegotiate -Value 0 Force
    
    #E/A Treiber deaktivieren 
    Set-NetAdapterBinding -name "vEthernet (CSV)" -ComponentID ms_rspndr -Enabled $false
    Set-NetAdapterBinding -name "vEthernet (CSV)" -ComponentID ms_lltdio -Enabled $false

    #DNS Registrierung auf den nicht benoetigten Adaptern deaktivieren
    Set-DnsClient -InterfaceAlias "vEthernet (Livemigration)" -RegisterThisConnectionsAddress $false
    Set-DnsClient -InterfaceAlias "vEthernet (CSV)" -RegisterThisConnectionsAddress $false
    Set-DnsClient -InterfaceAlias "vEthernet (Backup)" -RegisterThisConnectionsAddress $false
    set-ItemProperty -Path "HKLM:\SOFTWARE\KSW-HV-Install" InstallStep -Value 3 Force
    Restart-Computer
    }    

    elseif ($InstallStep.installstep -eq 3) #Languagepack installieren
    {
    Dism /online /add-package /Packagepath:c:\blade\de-de\lp.cab
    set-ItemProperty -Path "HKLM:\SOFTWARE\KSW-HV-Install" InstallStep -Value 4 Force
    Restart-Computer
    }


elseif ($InstallStep.installstep -eq 4) #Registrierungsnderungen entfernen
    {
   
    Remove-Item -Path "HKLM:\SOFTWARE\KSW-HV-Install" Force
    Remove-Item -Path "C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\autostart.cmd" -Force
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" AutoAdminLogon -Value 0 Force
    Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" DefaultPassword  Force
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" DisableCAD -Value 0 Force
    Write-Host "Einrichtung abgeschlossen"
    Write-Host "Bitte ein neues Administratorkennwort vergeben !!!"
    net user Administrator *
    Restart-Computer

    }


# Wird erst nach Erstellung des Clusters bentigt
#(Get-ClusterNetwork CSV).Metric=900
#(Get-ClusterNetwork Livemigration).Metric=1100
