Initial
This commit is contained in:
184
Win2016_GUI.ps1
Normal file
184
Win2016_GUI.ps1
Normal file
@@ -0,0 +1,184 @@
|
||||
# -------------------------------------- Part 1 Start -------------------------------------- #
|
||||
|
||||
# Computername & VMName
|
||||
$Name = "SRV-WSUS-01"
|
||||
|
||||
# CPU's
|
||||
$CPUCount = 2
|
||||
|
||||
# VM Generation
|
||||
$Generation = 2
|
||||
|
||||
# RAM
|
||||
$RAMCount = 2GB
|
||||
$RAMCountMin = 1GB
|
||||
$RAMCountMax = 4GB
|
||||
|
||||
# DNS Domain Name
|
||||
$DNSDomain = "schwab.local"
|
||||
|
||||
# IP Address
|
||||
$IPDomain = "192.168.10.15"
|
||||
|
||||
# Default Gateway to be used
|
||||
$DefaultGW = "192.168.10.1"
|
||||
|
||||
# DNS Server
|
||||
$DNSServer1 = "192.168.10.11"
|
||||
$DNSServer2 = "192.168.10.10"
|
||||
|
||||
# Hyper-V Switch Name
|
||||
$SwitchNameDomain = "Private Net"
|
||||
|
||||
#Set the VM Domain access NIC name
|
||||
$NetworkAdapterName = "Primary Adapter"
|
||||
|
||||
# Username & Password
|
||||
$AdminAccount = "Local-Admin"
|
||||
$AdminDisplayName = "Administrator (Local)"
|
||||
$AdminPassword = "ABCD-1234"
|
||||
|
||||
# This ProductID is actually the AVMA key provided by MS
|
||||
$ProductID = "TMJ3Y-NTRTM-FJYXT-T22BY-CWG3J"
|
||||
|
||||
# Where's the VM Default location? You can also specify it manually
|
||||
$Path = Get-VMHost | select VirtualMachinePath -ExpandProperty VirtualMachinePath
|
||||
|
||||
# Where should I store the VM VHD?, you actually have nothing to do here unless you want a custom name on the VHD
|
||||
$VHDPath = $Path + $Name + "\" + "Virtual Disks"
|
||||
$VHDPathFile = $Path + $Name + "\" + "Virtual Disks" + "\" + $Name + ".vhdx"
|
||||
|
||||
# Where are the folders with prereq software ?
|
||||
$StartupFolder = ".\01_Config\$Name"
|
||||
$TemplateLocation = ".\02_Sources\2016\SYSPREP\2016_SypPrep-GUI.vhdx"
|
||||
$UnattendLocation = ".\01_Config"
|
||||
|
||||
# -------------------------------------- Part 1 Stop --------------------------------------- #
|
||||
|
||||
function FN-Unattend
|
||||
{
|
||||
Copy-Item $UnattendLocation\Unattend.xml $StartupFolder\Unattend-$Name.xml
|
||||
|
||||
$DefaultXML = $StartupFolder+"\Unattend-"+$Name+".xml"
|
||||
$NewXML = $StartupFolder+"\Unattend-"+$Name+".xml"
|
||||
$DefaultXML = Get-Content $DefaultXML
|
||||
$DefaultXML | Foreach-Object {
|
||||
$_ -replace '1AdminAccount', $AdminAccount `
|
||||
-replace '1AdminDisplayName', $AdminDisplayName `
|
||||
-replace '1Name', $Name `
|
||||
-replace '1ProductID', $ProductID`
|
||||
-replace '1AdminPassword', $AdminPassword `
|
||||
} | Set-Content $NewXML
|
||||
}
|
||||
|
||||
function FN-Network
|
||||
{
|
||||
Copy-Item $UnattendLocation\Network.ps1 $StartupFolder\Network-$Name.ps1
|
||||
|
||||
$DefaultNetwork = $StartupFolder+ "\Network-"+$Name+".ps1"
|
||||
$NewNetwork = $StartupFolder+ "\Network-"+$Name+".ps1"
|
||||
$DefaultNetwork = Get-Content $DefaultNetwork
|
||||
$DefaultNetwork | Foreach-Object {
|
||||
$_ -replace '1MACAddress', $MACAddress `
|
||||
-replace '1NetworkAdapterName', $NetworkAdapterName `
|
||||
-replace '1IPDomain', $IPDomain `
|
||||
-replace '1DefaultGW', $DefaultGW `
|
||||
-replace '1DNSServer1', $DNSServer1 `
|
||||
-replace '1DNSServer2', $DNSServer2 `
|
||||
-replace '1DNSDomain', $DNSDomain `
|
||||
} | Set-Content $NewNetwork
|
||||
}
|
||||
|
||||
function FN-BGInfo
|
||||
{
|
||||
Copy-Item $UnattendLocation\BGInfo.ps1 $StartupFolder\BGInfo-$Name.ps1
|
||||
|
||||
$NewBGInfo = $StartupFolder+ "\BGInfo-"+$Name+".ps1"
|
||||
|
||||
}
|
||||
|
||||
# -------------------------------------- Part 2 Start -------------------------------------- #
|
||||
|
||||
|
||||
# -- Check if VM exists -- #
|
||||
|
||||
$VMS = Get-VM
|
||||
Foreach($VM in $VMS)
|
||||
{
|
||||
if ($Name -match $VM.Name)
|
||||
{
|
||||
write-host -ForegroundColor Red "Found VM With the same name!!!!!"
|
||||
$Found=$True
|
||||
}
|
||||
}
|
||||
|
||||
# -- Create the VM -- #
|
||||
|
||||
New-VM -Name $Name -Path $Path -MemoryStartupBytes $RAMCount -Generation 2 -NoVHD
|
||||
|
||||
# -- Remove any auto generated adapters and add new ones with correct names for Consistent Device Naming -- #
|
||||
|
||||
Get-VMNetworkAdapter -VMName $Name | Remove-VMNetworkAdapter
|
||||
Add-VMNetworkAdapter -VMName $Name -SwitchName $SwitchNameDomain -Name $NetworkAdapterName -DeviceNaming On
|
||||
|
||||
# -- Start and stop VM to get mac address, then arm the new MAC address on the NIC itself -- #
|
||||
|
||||
start-vm $Name
|
||||
sleep 5
|
||||
stop-vm $Name -Force
|
||||
sleep 5
|
||||
|
||||
$MACAddress = Get-VMNetworkAdapter -VMName $Name -Name $NetworkAdapterName|select MacAddress -ExpandProperty MacAddress
|
||||
$MACAddress = ($MACAddress -replace '(..)','$1-').trim('-')
|
||||
Get-VMNetworkAdapter -VMName $Name -Name $NetworkAdapterName|Set-VMNetworkAdapter -StaticMacAddress $MACAddress
|
||||
|
||||
# -- Copy the template and add the disk on the VM. Also configure CPU and start - stop settings -- #
|
||||
|
||||
mkdir $VHDPath
|
||||
Copy-item $TemplateLocation -Destination $VHDPathFile
|
||||
Set-VM -Name $Name -ProcessorCount $CpuCount -AutomaticCheckpointsEnabled $false -AutomaticStartAction Start -AutomaticStopAction ShutDown -AutomaticStartDelay 5 -MemoryMinimumBytes $RAMCountMin -MemoryMaximumBytes $RAMCountMax
|
||||
Add-VMHardDiskDrive -VMName $Name -ControllerType SCSI -Path $VHDPathFile
|
||||
|
||||
# -- Set first boot device to the disk we attached -- #
|
||||
|
||||
$Drive = Get-VMHardDiskDrive -VMName $Name | where {$_.Path -eq "$VHDPathFile"}
|
||||
Get-VMFirmware -VMName $Name | Set-VMFirmware -FirstBootDevice $Drive
|
||||
|
||||
# -- Prepare the unattend.xml & SetupComplete.cmd file to send out, simply copy to a new file and replace values -- #
|
||||
|
||||
mkdir $StartupFolder
|
||||
|
||||
FN-Unattend
|
||||
|
||||
FN-Network
|
||||
|
||||
FN-BGInfo
|
||||
|
||||
|
||||
# -- Mount the new virtual machine VHD -- #
|
||||
|
||||
Mount-VHD -Path $VHDPathFile
|
||||
|
||||
# -- Find the drive letter of the mounted VHD -- #
|
||||
|
||||
$VolumeDriveLetter = GET-DISKIMAGE $VHDPathFile | GET-DISK | GET-PARTITION |get-volume |?{$_.FileSystemLabel -ne "Recovery"}|select DriveLetter -ExpandProperty DriveLetter
|
||||
|
||||
# -- Construct the drive letter of the mounted VHD Drive -- #
|
||||
|
||||
$DriveLetter = "$VolumeDriveLetter"+":"
|
||||
|
||||
# -- Copy the unattend.xml to the drive -- #
|
||||
|
||||
Copy-Item $NewXML $DriveLetter\unattend.xml
|
||||
Copy-Item $NewNetwork $DriveLetter\Windows\Setup\Scripts\Network.ps1
|
||||
Copy-Item $NewBGInfo $DriveLetter\Windows\Setup\Scripts\BGInfo.ps1
|
||||
|
||||
# -- Dismount the VHD -- #
|
||||
|
||||
Dismount-Vhd -Path $VHDPathFile
|
||||
|
||||
# -- Fire up the VM -- #
|
||||
|
||||
Start-VM $Name
|
||||
|
||||
# -------------------------------------- Part 2 Stop --------------------------------------- #
|
||||
Reference in New Issue
Block a user