diff --git a/CopyFilesToVM.ps1 b/CopyFilesToVM.ps1 index e5f616c..44ca541 100644 --- a/CopyFilesToVM.ps1 +++ b/CopyFilesToVM.ps1 @@ -1,20 +1,22 @@ $params = @{ - VMName = "GPU-P" - SourcePath = "C:\Users\james\Downloads\Win11_English_x64.iso" - Edition = 6 + VMName = "GPUP" + SourcePath = "C:\Users\james\Downloads\Win11_English_x64.iso" + Edition = 6 VhdFormat = "VHDX" DiskLayout = "UEFI" SizeBytes = 40gb MemoryAmount = 8GB CPUCores = 4 UnattendPath = "$PSScriptRoot"+"\autounattend.xml" - GPUName = "NVIDIA Geforce RTX 2060 SUPER" - GPUResourceAllocationPercentage = 50 - Team_ID = "" + GPUName = "NVIDIA Geforce RTX 2060 SUPER" + GPUResourceAllocationPercentage = 50 + Team_ID = "" Key = "" + Username = "GPUVM" + Password = "CoolestPassword!" + Autologon = "true" } - Function Setup-ParsecInstall { param( [string]$DriveLetter, @@ -47,7 +49,6 @@ param( Copy-Item -Path $psscriptroot\Machine\Install.ps1 -Destination $DriveLetter\Windows\system32\GroupPolicy\Machine\Scripts\Startup } - Function Add-VMGpuPartitionAdapterFiles { param( [string]$hostname = $ENV:COMPUTERNAME, @@ -4213,6 +4214,26 @@ VirtualHardDisk Add-Type -TypeDefinition $code -ReferencedAssemblies "System.Xml","System.Linq","System.Xml.Linq" -ErrorAction SilentlyContinue } +Function Modify-AutoUnattend { +param ( +[string]$username, +[string]$password, +[string]$autologon, +[string]$hostname, +[string]$UnattendPath + ) + [xml]$xml = get-content -path $UnattendPath + ($xml.unattend.settings.component | where-object {$_.autologon}).autologon.password.value = $password + ($xml.unattend.settings.component | where-object {$_.autologon}).autologon.username = $username + ($xml.unattend.settings.component | where-object {$_.autologon}).autologon.enabled = $autologon + ($xml.unattend.settings.component | where-object {$_.UserAccounts}).UserAccounts.LocalAccounts.localaccount.Group = "Administrators" + ($xml.unattend.settings.component | where-object {$_.UserAccounts}).UserAccounts.LocalAccounts.localaccount.Name = $username + ($xml.unattend.settings.component | where-object {$_.UserAccounts}).UserAccounts.LocalAccounts.localaccount.DisplayName = $username + ($xml.unattend.settings.component | where-object {$_.UserAccounts}).UserAccounts.LocalAccounts.localaccount.Password.Value = $password + ($xml.unattend.settings.component | where-object {$_.Computername}).Computername = $hostname + $xml.Save("$UnattendPath") +} + function Assign-VMGPUPartitionAdapter { param( [string]$VMName, @@ -4245,13 +4266,17 @@ param( [float]$GPUResourceAllocationPercentage, [string]$SourcePath, [string]$Team_ID, -[string]$Key +[string]$Key, +[string]$username, +[string]$password, +[string]$autologon ) - + Modify-AutoUnattend -username "$username" -password "$password" -autologon $autologon -hostname $VMName -UnattendPath $UnattendPath Convert-WindowsImage -SourcePath $SourcePath -Edition $Edition -VHDFormat $Vhdformat -VHDPath $VhdPath -DiskLayout $DiskLayout -UnattendPath $UnattendPath -GPUName $GPUName -Team_ID $Team_ID -Key $Key| Out-Null New-VM -Name $VMName -MemoryStartupBytes $MemoryAmount -VHDPath $VhdPath -Generation 2 -SwitchName "Default Switch" | Out-Null Set-VM -Name $VMName -ProcessorCount $CPUCores -CheckpointType Disabled -LowMemoryMappedIoSpace 3GB -HighMemoryMappedIoSpace 32GB -GuestControlledCacheTypes $true -AutomaticStopAction ShutDown - Set-VMMemory -VMName $VMName -DynamicMemoryEnabled $false + Set-VMMemory -VMName $VMName -DynamicMemoryEnabled $false + Set-VMProcessor -VMName $VMName -ExposeVirtualizationExtensions $true Set-VMKeyProtector -VMName $VMName -NewLocalKeyProtector Enable-VMTPM -VMName $VMName Add-VMDvdDrive -VMName $VMName -Path $SourcePath @@ -4259,11 +4284,9 @@ param( Assign-VMGPUPartitionAdapter -GPUName $GPUName -VMName $VMName -GPUResourceAllocationPercentage $GPUResourceAllocationPercentage } - New-GPUEnabledVM @params - -Start-VM -Name GPU-P +Start-VM -Name $params.VMName Read-Host -Prompt "If all went well the Virtual Machine will have started - you need to approve a certificate install inside the VM diff --git a/autounattend.xml b/autounattend.xml index 211089c..6e3cd3e 100644 --- a/autounattend.xml +++ b/autounattend.xml @@ -1,204 +1,198 @@ - - - + - - - -en-US - -0409:00000409 -en-US -en-US -en-US -en-AU - - - - -0 -true - - - -1 -Primary -300 - - - -2 -EFI -100 - - - -3 -MSR -128 - - - -4 -Primary -true - - - - - -1 -1 - -NTFS -DE94BBA4-06D1-4D40-A16A-BFD50179D6AC - - - -2 -2 - -FAT32 - - - -3 -3 - - - -4 -4 - -C -NTFS - - - - - - - -0 -4 - -false - - - - - - - -Never - -true -GPU-P - - - - - - -true - - - - -1 - - - - -0409:00000409 -en-AU -en-AU -en-AU -en-AU - - -true - - -0 - - -GPU-P -W269N-WFGWX-YVC9B-4J6C9-T83GX - - - - - - -CoolPassword!:) -true</PlainText> -</Password> -<Enabled>true</Enabled> -<Username>GPUP</Username> -</AutoLogon> -<OOBE> -<HideEULAPage>true</HideEULAPage> -<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> -<HideOnlineAccountScreens>true</HideOnlineAccountScreens> -<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> -<NetworkLocation>Home</NetworkLocation> -<SkipUserOOBE>true</SkipUserOOBE> -<SkipMachineOOBE>true</SkipMachineOOBE> -<ProtectYourPC>1</ProtectYourPC> -</OOBE> -<UserAccounts> -<LocalAccounts> -<LocalAccount wcm:action="add"> -<Password> -<Value>CoolPassword!:)</Value> -<PlainText>true</PlainText> -</Password> -<Description></Description> -<DisplayName>GPUP</DisplayName> -<Group>Administrators</Group> -<Name>GPUP</Name> -</LocalAccount> -</LocalAccounts> -</UserAccounts> -<RegisteredOrganization></RegisteredOrganization> -<RegisteredOwner>GPU-P</RegisteredOwner> -<DisableAutoDaylightTimeSet>false</DisableAutoDaylightTimeSet> -<FirstLogonCommands> -<SynchronousCommand wcm:action="add"> -<Description>Allow Scripts</Description> -<Order>1</Order> -<CommandLine>reg add HKLM\Software\Policies\Microsoft\Windows\Powershell</CommandLine> -<RequiresUserInput>false</RequiresUserInput> -</SynchronousCommand> -<SynchronousCommand wcm:action="add"> -<Description>Allow Scripts</Description> -<Order>2</Order> -<CommandLine>reg add HKLM\Software\Policies\Microsoft\Windows\Powershell /v ExecutionPolicy /t REG_SZ /d Unrestricted</CommandLine> -<RequiresUserInput>false</RequiresUserInput> -</SynchronousCommand> -<SynchronousCommand wcm:action="add"> -<Description>Allow Scripts</Description> -<Order>3</Order> -<CommandLine>reg add HKLM\Software\Policies\Microsoft\Windows\Powershell /v EnableScripts /t REG_DWORD /d 1</CommandLine> -<RequiresUserInput>false</RequiresUserInput> -</SynchronousCommand> -<SynchronousCommand wcm:action="add"> -<Order>4</Order> -<RequiresUserInput>false</RequiresUserInput> -<CommandLine>cmd /C wmic useraccount where name="GPU-P" set PasswordExpires=false</CommandLine> -<Description>Password Never Expires</Description> -</SynchronousCommand> -</FirstLogonCommands> -<TimeZone>GTB Standard Time</TimeZone> -</component> -</settings> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-AU</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- Windows RE Tools partition --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>300</Size> + </CreatePartition> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>EFI</Type> + <Size>100</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>4</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- Windows RE Tools partition --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>WINRE</Label> + <Format>NTFS</Format> + <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID> + </ModifyPartition> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>4</Order> + <PartitionID>4</PartitionID> + <Label>OS</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>4</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <UserData> + <ProductKey> + <!-- Do not uncomment the Key element if you are using trial ISOs --> + <!-- You must uncomment the Key element (and optionally insert your own key) if you are using retail or volume license ISOs --> + <Key> + </Key> + <WillShowUI>Never</WillShowUI> + </ProductKey> + <AcceptEula>true</AcceptEula> + <FullName>GPU-P</FullName> + <Organization> + </Organization> + </UserData> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <EnableLUA>true</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-AU</SystemLocale> + <UILanguage>en-AU</UILanguage> + <UILanguageFallback>en-AU</UILanguageFallback> + <UserLocale>en-AU</UserLocale> + </component> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <ComputerName>GPUP</ComputerName> + <ProductKey>W269N-WFGWX-YVC9B-4J6C9-T83GX</ProductKey> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <AutoLogon> + <Password> + <Value>CoolestPassword!</Value> + <PlainText>true</PlainText> + </Password> + <Enabled>true</Enabled> + <Username>GPUVM</Username> + </AutoLogon> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + <ProtectYourPC>1</ProtectYourPC> + </OOBE> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Password> + <Value>CoolestPassword!</Value> + <PlainText>true</PlainText> + </Password> + <Description> + </Description> + <DisplayName>GPUVM</DisplayName> + <Group>Administrators</Group> + <Name>GPUVM</Name> + </LocalAccount> + </LocalAccounts> + </UserAccounts> + <RegisteredOrganization> + </RegisteredOrganization> + <RegisteredOwner>GPU-P</RegisteredOwner> + <DisableAutoDaylightTimeSet>false</DisableAutoDaylightTimeSet> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Description>Allow Scripts</Description> + <Order>1</Order> + <CommandLine>reg add HKLM\Software\Policies\Microsoft\Windows\Powershell</CommandLine> + <RequiresUserInput>false</RequiresUserInput> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Description>Allow Scripts</Description> + <Order>2</Order> + <CommandLine>reg add HKLM\Software\Policies\Microsoft\Windows\Powershell /v ExecutionPolicy /t REG_SZ /d Unrestricted</CommandLine> + <RequiresUserInput>false</RequiresUserInput> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Description>Allow Scripts</Description> + <Order>3</Order> + <CommandLine>reg add HKLM\Software\Policies\Microsoft\Windows\Powershell /v EnableScripts /t REG_DWORD /d 1</CommandLine> + <RequiresUserInput>false</RequiresUserInput> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <RequiresUserInput>false</RequiresUserInput> + <CommandLine>cmd /C wmic useraccount where name="GPU-P" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + </FirstLogonCommands> + <TimeZone>GTB Standard Time</TimeZone> + </component> + </settings> </unattend> \ No newline at end of file