Gitlab to Gitea Migration
This commit is contained in:
parent
03f6e69775
commit
ad9d74b642
77
Add-VMGpuPartitionAdapterFiles.psm1
Normal file
77
Add-VMGpuPartitionAdapterFiles.psm1
Normal file
@ -0,0 +1,77 @@
|
||||
Function Add-VMGpuPartitionAdapterFiles {
|
||||
param(
|
||||
[string]$hostname = $ENV:COMPUTERNAME,
|
||||
[string]$DriveLetter,
|
||||
[string]$GPUName
|
||||
)
|
||||
|
||||
If (!($DriveLetter -like "*:*")) {
|
||||
$DriveLetter = $Driveletter + ":"
|
||||
}
|
||||
|
||||
If ($GPUName -eq "AUTO") {
|
||||
$PartitionableGPUList = Get-WmiObject -Class "Msvm_PartitionableGpu" -ComputerName $env:COMPUTERNAME -Namespace "ROOT\virtualization\v2"
|
||||
$DevicePathName = $PartitionableGPUList.Name | Select-Object -First 1
|
||||
$GPU = Get-PnpDevice | Where-Object {($_.DeviceID -like "*$($DevicePathName.Substring(8,16))*") -and ($_.Status -eq "OK")} | Select-Object -First 1
|
||||
$GPUName = $GPU.Friendlyname
|
||||
$GPUServiceName = $GPU.Service
|
||||
}
|
||||
Else {
|
||||
$GPU = Get-PnpDevice | Where-Object {($_.Name -eq "$GPUName") -and ($_.Status -eq "OK")} | Select-Object -First 1
|
||||
$GPUServiceName = $GPU.Service
|
||||
}
|
||||
# Get Third Party drivers used, that are not provided by Microsoft and presumably included in the OS
|
||||
|
||||
Write-Host "INFO : Finding and copying driver files for $GPUName to VM. This could take a while..."
|
||||
|
||||
$Drivers = Get-WmiObject Win32_PNPSignedDriver | where {$_.DeviceName -eq "$GPUName"}
|
||||
|
||||
New-Item -ItemType Directory -Path "$DriveLetter\windows\system32\HostDriverStore" -Force | Out-Null
|
||||
|
||||
#copy directory associated with sys file
|
||||
$servicePath = (Get-WmiObject Win32_SystemDriver | Where-Object {$_.Name -eq "$GPUServiceName"}).Pathname
|
||||
$ServiceDriverDir = $servicepath.split('\')[0..5] -join('\')
|
||||
$ServicedriverDest = ("$driveletter" + "\" + $($servicepath.split('\')[1..5] -join('\'))).Replace("DriverStore","HostDriverStore")
|
||||
if (!(Test-Path $ServicedriverDest)) {
|
||||
Copy-item -path "$ServiceDriverDir" -Destination "$ServicedriverDest" -Recurse
|
||||
}
|
||||
|
||||
# Initialize the list of detected driver packages as an array
|
||||
$DriverFolders = @()
|
||||
foreach ($d in $drivers) {
|
||||
|
||||
$DriverFiles = @()
|
||||
$ModifiedDeviceID = $d.DeviceID -replace "\\", "\\"
|
||||
$Antecedent = "\\" + $hostname + "\ROOT\cimv2:Win32_PNPSignedDriver.DeviceID=""$ModifiedDeviceID"""
|
||||
$DriverFiles += Get-WmiObject Win32_PNPSignedDriverCIMDataFile | where {$_.Antecedent -eq $Antecedent}
|
||||
$DriverName = $d.DeviceName
|
||||
$DriverID = $d.DeviceID
|
||||
if ($DriverName -like "NVIDIA*") {
|
||||
New-Item -ItemType Directory -Path "$driveletter\Windows\System32\drivers\Nvidia Corporation\" -Force | Out-Null
|
||||
}
|
||||
foreach ($i in $DriverFiles) {
|
||||
$path = $i.Dependent.Split("=")[1] -replace '\\\\', '\'
|
||||
$path2 = $path.Substring(1,$path.Length-2)
|
||||
$InfItem = Get-Item -Path $path2
|
||||
$Version = $InfItem.VersionInfo.FileVersion
|
||||
If ($path2 -like "c:\windows\system32\driverstore\*") {
|
||||
$DriverDir = $path2.split('\')[0..5] -join('\')
|
||||
$driverDest = ("$driveletter" + "\" + $($path2.split('\')[1..5] -join('\'))).Replace("driverstore","HostDriverStore")
|
||||
if (!(Test-Path $driverDest)) {
|
||||
Copy-item -path "$DriverDir" -Destination "$driverDest" -Recurse
|
||||
}
|
||||
}
|
||||
Else {
|
||||
$ParseDestination = $path2.Replace("c:", "$driveletter")
|
||||
$Destination = $ParseDestination.Substring(0, $ParseDestination.LastIndexOf('\'))
|
||||
if (!$(Test-Path -Path $Destination)) {
|
||||
New-Item -ItemType Directory -Path $Destination -Force | Out-Null
|
||||
}
|
||||
Copy-Item $path2 -Destination $Destination -Force
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
4403
CopyFilesToVM.ps1
Normal file
4403
CopyFilesToVM.ps1
Normal file
File diff suppressed because it is too large
Load Diff
33
Machine/Install.ps1
Normal file
33
Machine/Install.ps1
Normal file
@ -0,0 +1,33 @@
|
||||
<#
|
||||
if (!(Test-Path C:\ProgramData\Easy-GPU-P\second.txt)) {
|
||||
exit
|
||||
}
|
||||
else {
|
||||
if( !((Get-ChildItem -Path Cert:\CurrentUser\TrustedPublisher).DnsNameList.Unicode -like "Parsec Cloud, Inc.")) {
|
||||
$Success = $false
|
||||
[int]$Retries = 0
|
||||
do {
|
||||
try {
|
||||
Import-Certificate -CertStoreLocation Cert:\CurrentUser\TrustedPublisher -FilePath C:\ProgramData\Easy-GPU-P\parsecpublic.cer
|
||||
$Success = $true
|
||||
}
|
||||
catch {
|
||||
if ($Retries -gt 60){
|
||||
$Success = $true
|
||||
}
|
||||
else {
|
||||
Start-Sleep -Seconds 1
|
||||
$Error[0] |Out-File C:\ProgramData\Easy-GPU-P\log.txt
|
||||
$env:USERNAME | Out-File C:\ProgramData\Easy-GPU-P\username.txt
|
||||
$Retries++
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
While ($Success -eq $false)
|
||||
|
||||
}
|
||||
Else {
|
||||
}
|
||||
}
|
||||
#>
|
||||
4
Machine/psscripts.ini
Normal file
4
Machine/psscripts.ini
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
[Startup]
|
||||
0CmdLine=Install.ps1
|
||||
0Parameters=
|
||||
65
PreChecks.ps1
Normal file
65
PreChecks.ps1
Normal file
@ -0,0 +1,65 @@
|
||||
|
||||
|
||||
Function Get-DesktopPC
|
||||
{
|
||||
$isDesktop = $true
|
||||
if(Get-WmiObject -Class win32_systemenclosure | Where-Object { $_.chassistypes -eq 9 -or $_.chassistypes -eq 10 -or $_.chassistypes -eq 14})
|
||||
{
|
||||
Write-Warning "Computer is a laptop. Laptop dedicated GPU's that are partitioned and assigned to VM may not work with Parsec."
|
||||
Write-Warning "Thunderbolt 3 or 4 dock based GPU's may work"
|
||||
$isDesktop = $false }
|
||||
if (Get-WmiObject -Class win32_battery)
|
||||
{ $isDesktop = $false }
|
||||
$isDesktop
|
||||
}
|
||||
|
||||
Function Get-WindowsCompatibleOS {
|
||||
$build = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
|
||||
if ($build.CurrentBuild -ge 19041 -and ($($build.editionid -like 'Professional*') -or $($build.editionid -like 'Enterprise*') -or $($build.editionid -like 'Education*'))) {
|
||||
Return $true
|
||||
}
|
||||
Else {
|
||||
Write-Warning "Only Windows 10 20H1 or Windows 11 (Pro or Enterprise) is supported"
|
||||
Return $false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Function Get-HyperVEnabled {
|
||||
if (Get-WindowsOptionalFeature -Online | Where-Object FeatureName -Like 'Microsoft-Hyper-V-All'){
|
||||
Return $true
|
||||
}
|
||||
Else {
|
||||
Write-Warning "You need to enable Virtualisation in your motherboard and then add the Hyper-V Windows Feature and reboot"
|
||||
Return $false
|
||||
}
|
||||
}
|
||||
|
||||
Function Get-WSLEnabled {
|
||||
if ((wsl -l -v)[2].length -gt 1 ) {
|
||||
Write-Warning "WSL is Enabled. This may interferre with GPU-P and produce an error 43 in the VM"
|
||||
Return $true
|
||||
}
|
||||
Else {
|
||||
Return $false
|
||||
}
|
||||
}
|
||||
|
||||
Function Get-VMGpuPartitionAdapterFriendlyName {
|
||||
$Devices = (Get-WmiObject -Class "Msvm_PartitionableGpu" -ComputerName $env:COMPUTERNAME -Namespace "ROOT\virtualization\v2").name
|
||||
Foreach ($GPU in $Devices) {
|
||||
$GPUParse = $GPU.Split('#')[1]
|
||||
Get-WmiObject Win32_PNPSignedDriver | where {($_.HardwareID -eq "PCI\$GPUParse")} | select DeviceName -ExpandProperty DeviceName
|
||||
}
|
||||
}
|
||||
|
||||
If ((Get-DesktopPC) -and (Get-WindowsCompatibleOS) -and (Get-HyperVEnabled)) {
|
||||
"System Compatible"
|
||||
"Printing a list of compatible GPUs...May take a second"
|
||||
"Copy the name of the GPU you want to share..."
|
||||
Get-VMGpuPartitionAdapterFriendlyName
|
||||
Read-Host -Prompt "Press Enter to Exit"
|
||||
}
|
||||
else {
|
||||
Read-Host -Prompt "Press Enter to Exit"
|
||||
}
|
||||
74
README.md
74
README.md
@ -1,3 +1,75 @@
|
||||
# Easy-GPU-PV
|
||||
A work-in-progress project dedicated to making GPU Paravirtualization on Windows Hyper-V easier!
|
||||
|
||||
A Project dedicated to making GPU Partitioning on Windows easier!
|
||||
GPU-PV allows you to partition your systems dedicated or integrated GPU and assign it to several Hyper-V VMs. It's the same technology that is used in WSL2, and Windows Sandbox.
|
||||
|
||||
Easy-GPU-PV aims to make this easier by automating the steps required to get a GPU-PV VM up and running.
|
||||
Easy-GPU-PV does the following...
|
||||
1) Creates a VM of your choosing
|
||||
2) Automatically Installs Windows to the VM
|
||||
3) Partitions your GPU of choice and copies the required driver files to the VM
|
||||
4) Installs [Parsec](https://parsec.app) to the VM, Parsec is an ultra low latency remote desktop app, use this to connect to the VM. You can use Parsec for free non commercially. To use Parsec commercially, sign up to a [Parsec For Teams](https://parsec.app/teams) account
|
||||
|
||||
### Prerequisites:
|
||||
* Windows 10 20H1+ Pro, Enterprise or Education OR Windows 11 Pro, Enterprise or Education. Windows 11 on host and VM is preferred due to better compatibility.
|
||||
* Matched Windows versions between the host and VM. Mismatches may cause compatibility issues, blue-screens, or other issues. (Win10 21H1 + Win10 21H1, or Win11 21H2 + Win11 21H2, for example)
|
||||
* Desktop Computer with dedicated NVIDIA/AMD GPU or Integrated Intel GPU - Laptops with NVIDIA GPUs are not supported at this time, but Intel integrated GPUs work on laptops. GPU must support hardware video encoding (NVIDIA NVENC, Intel Quicksync or AMD AMF).
|
||||
* Latest GPU driver from Intel.com or NVIDIA.com, don't rely on Device manager or Windows update.
|
||||
* Latest Windows 10 ISO [downloaded from here](https://www.microsoft.com/en-gb/software-download/windows10ISO) / Windows 11 ISO [downloaded from here.](https://www.microsoft.com/en-us/software-download/windows11) - Do not use Media Creation Tool, if no direct ISO link is available, follow [this guide.](https://www.nextofwindows.com/downloading-windows-10-iso-images-using-rufus)
|
||||
* Virtualisation enabled in the motherboard and [Hyper-V fully enabled](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v) on the Windows 10/ 11 OS (requires reboot).
|
||||
* Allow Powershell scripts to run on your system - typically by running "Set-ExecutionPolicy unrestricted" in Powershell running as Administrator.
|
||||
|
||||
### Instructions
|
||||
1. Make sure your system meets the prerequisites.
|
||||
2. [Download the Repo and extract.](https://github.com/jamesstringerparsec/Easy-GPU-PV/archive/refs/heads/main.zip)
|
||||
3. Search your system for Powershell ISE and run as Administrator.
|
||||
4. In the extracted folder you downloaded, open PreChecks.ps1 in Powershell ISE. Run the files from within the extracted folder. Do not move them.
|
||||
5. Open and Run PreChecks.ps1 in Powershell ISE using the green play button and copy the GPU Listed (or the warnings that you need to fix).
|
||||
6. Open CopyFilesToVM.ps1 Powershell ISE and edit the params section at the top of the file, you need to be careful about how much ram, storage and hard drive you give it as your system needs to have that available. On Windows 10 the GPUName must be left as "AUTO", In Windows 11 it can be either "AUTO" or the specific name of the GPU you want to partition exactly how it appears in PreChecks.ps1. Additionally, you need to provide the path to the Windows 10/11 ISO file you downloaded.
|
||||
7. Run CopyFilesToVM.ps1 with your changes to the params section - this may take 5-10 minutes.
|
||||
8. Open and sign into Parsec on the VM. You can use Parsec to connect to the VM up to 4K60FPS.
|
||||
9. You should be good to go!
|
||||
|
||||
### Upgrading GPU Drivers when you update the host GPU Drivers
|
||||
It's important to update the VM GPU Drivers after you have updated the Host GPUs drivers. You can do this by...
|
||||
1. Reboot the host after updating GPU Drivers.
|
||||
2. Open Powershell as administrator and change directory (CD) to the path that CopyFilestoVM.ps1 and Update-VMGPUPartitonDriver.ps1 are located.
|
||||
3. Run ```Update-VMGPUPartitonDriver.ps1 -VMName "Name of your VM" -GPUName "Name of your GPU"``` (Windows 10 GPU name must be "AUTO")
|
||||
|
||||
### Values
|
||||
```VMName = "GPUP"``` - Name of VM in Hyper-V and the computername / hostname
|
||||
```SourcePath = "C:\Users\james\Downloads\Win11_English_x64.iso"``` - path to Windows 10/ 11 ISO on your host
|
||||
```Edition = 6``` - Leave as 6, this means Windows 10/11 Pro
|
||||
```VhdFormat = "VHDX"``` - Leave this value alone
|
||||
```DiskLayout = "UEFI"``` - Leave this value alone
|
||||
```SizeBytes = 40gb``` - Disk size, in this case 40GB, the minimum is 20GB
|
||||
```MemoryAmount = 8GB``` - Memory size, in this case 8GB
|
||||
```CPUCores = 4``` - CPU Cores you want to give VM, in this case 4
|
||||
```NetworkSwitch = "Default Switch"``` - Leave this alone unless you're not using the default Hyper-V Switch
|
||||
```VHDPath = "C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\"``` - Path to the folder you want the VM Disk to be stored in, it must already exist
|
||||
```UnattendPath = "$PSScriptRoot"+"\autounattend.xml"``` -Leave this value alone
|
||||
```GPUName = "AUTO"``` - AUTO selects the first available GPU. On Windows 11 you may also use the exact name of the GPU you want to share with the VM in multi GPU situations (GPU selection is not available in Windows 10 and must be set to AUTO)
|
||||
```GPUResourceAllocationPercentage = 50``` - Percentage of the GPU you want to share with the VM
|
||||
```Team_ID = ""``` - The Parsec for Teams ID if you are a Parsec for Teams Subscriber
|
||||
```Key = ""``` - The Parsec for Teams Secret Key if you are a Parsec for Teams Subscriber
|
||||
```Username = "GPUVM"``` - The VM Windows Username, do not include special characters, and must be different from the "VMName" value you set
|
||||
```Password = "CoolestPassword!"``` - The VM Windows Password, cannot be blank
|
||||
```Autologon = "true"```- If you want the VM to automatically login to the Windows Desktop
|
||||
|
||||
|
||||
### Thanks to:
|
||||
- [Hyper-ConvertImage](https://github.com/tabs-not-spaces/Hyper-ConvertImage) for creating an updated version of [Convert-WindowsImage](https://github.com/MicrosoftDocs/Virtualization-Documentation/tree/master/hyperv-tools/Convert-WindowsImage) that is compatible with Windows 10 and 11.
|
||||
- [gawainXX](https://github.com/gawainXX) for help testing and pointing out bugs and feature improvements.
|
||||
|
||||
|
||||
### Notes:
|
||||
- After you have signed into Parsec on the VM, always use Parsec to connect to the VM. Keep the Microsft Hyper-V Video adapter disabled. Using RDP and Hyper-V Enhanced Session mode will result in broken behaviour and black screens in Parsec. RDP and the Hyper-V video adapter only offer a maximum of 30FPS. Using Parsec will allow you to use up to 4k60 FPS.
|
||||
- If you get "ERROR : Cannot bind argument to parameter 'Path' because it is null." this probably means you used Media Creation Tool to download the ISO. You unfortunately cannot use that, if you don't see a direct ISO download link at the Microsoft page, follow [this guide.](https://www.nextofwindows.com/downloading-windows-10-iso-images-using-rufus)
|
||||
- Your GPU on the host will have a Microsoft driver in device manager, rather than an nvidia/intel/amd driver. As long as it doesn't have a yellow triangle over top of the device in device manager, it's working correctly.
|
||||
- A powered on display / HDMI dummy dongle must be plugged into the GPU to allow Parsec to capture the screen. You only need one of these per host machine regardless of number of VM's.
|
||||
- If your computer is super fast it may get to the login screen before the audio driver (VB Cable) and Parsec display driver are installed, but fear not! They should soon install.
|
||||
- The screen may go black for times up to 10 seconds in situations when UAC prompts appear, applications go in and out of fullscreen and when you switch between video codecs in Parsec - not really sure why this happens, it's unique to GPU-P machines and seems to recover faster at 1280x720.
|
||||
- Vulkan renderer is unavailable and GL games may or may not work. [This](https://www.microsoft.com/en-us/p/opencl-and-opengl-compatibility-pack/9nqpsl29bfff?SilentAuth=1&wa=wsignin1.0#activetab=pivot:overviewtab) may help with some OpenGL apps.
|
||||
- If you do not have administrator permissions on the machine it means you set the username and vmname to the same thing, these needs to be different.
|
||||
- AMD Polaris GPUS like the RX 580 do not support hardware video encoding via GPU Paravirtualization at this time.
|
||||
- To download Windows ISOs with Rufus, it must have "Check for updates" enabled.
|
||||
|
||||
52
Update-VMGpuPartitionDriver.ps1
Normal file
52
Update-VMGpuPartitionDriver.ps1
Normal file
@ -0,0 +1,52 @@
|
||||
<#
|
||||
If you are opening this file in Powershell ISE you should modify the params section like so...
|
||||
Remember: GPU Name must match the name of the GPU you assigned when creating the VM...
|
||||
|
||||
Param (
|
||||
[string]$VMName = "NameofyourVM",
|
||||
[string]$GPUName = "NameofyourGPU",
|
||||
[string]$Hostname = $ENV:Computername
|
||||
)
|
||||
|
||||
#>
|
||||
|
||||
Param (
|
||||
[string]$VMName,
|
||||
[string]$GPUName,
|
||||
[string]$Hostname = $ENV:Computername
|
||||
)
|
||||
|
||||
Import-Module $PSSCriptRoot\Add-VMGpuPartitionAdapterFiles.psm1
|
||||
|
||||
$VM = Get-VM -VMName $VMName
|
||||
$VHD = Get-VHD -VMId $VM.VMId
|
||||
|
||||
If ($VM.state -eq "Running") {
|
||||
[bool]$state_was_running = $true
|
||||
}
|
||||
|
||||
if ($VM.state -ne "Off"){
|
||||
"Attemping to shutdown VM..."
|
||||
Stop-VM -Name $VMName -Force
|
||||
}
|
||||
|
||||
While ($VM.State -ne "Off") {
|
||||
Start-Sleep -s 3
|
||||
"Waiting for VM to shutdown - make sure there are no unsaved documents..."
|
||||
}
|
||||
|
||||
"Mounting Drive..."
|
||||
$DriveLetter = (Mount-VHD -Path $VHD.Path -PassThru | Get-Disk | Get-Partition | Get-Volume | Where-Object {$_.DriveLetter} | ForEach-Object DriveLetter)
|
||||
|
||||
"Copying GPU Files - this could take a while..."
|
||||
Add-VMGPUPartitionAdapterFiles -hostname $Hostname -DriveLetter $DriveLetter -GPUName $GPUName
|
||||
|
||||
"Dismounting Drive..."
|
||||
Dismount-VHD -Path $VHD.Path
|
||||
|
||||
If ($state_was_running){
|
||||
"Previous State was running so starting VM..."
|
||||
Start-VM $VMName
|
||||
}
|
||||
|
||||
"Done..."
|
||||
212
User/Install.ps1
Normal file
212
User/Install.ps1
Normal file
@ -0,0 +1,212 @@
|
||||
param(
|
||||
$team_id,
|
||||
$key
|
||||
)
|
||||
|
||||
while(!(Test-NetConnection Google.com).PingSucceeded){
|
||||
Start-Sleep -Seconds 1
|
||||
}
|
||||
|
||||
Get-ChildItem -Path C:\ProgramData\Easy-GPU-P -Recurse | Unblock-File
|
||||
|
||||
if (Test-Path HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Parsec)
|
||||
{}
|
||||
else {
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://builds.parsecgaming.com/package/parsec-windows.exe", "C:\Users\$env:USERNAME\Downloads\parsec-windows.exe")
|
||||
Start-Process "C:\Users\$env:USERNAME\Downloads\parsec-windows.exe" -ArgumentList "/silent", "/shared","/team_id=$team_id","/team_computer_key=$key" -wait
|
||||
While (!(Test-Path C:\ProgramData\Parsec\config.txt)){
|
||||
Start-Sleep -s 1
|
||||
}
|
||||
$configfile = Get-Content C:\ProgramData\Parsec\config.txt
|
||||
$configfile += "host_virtual_monitors = 1"
|
||||
$configfile += "host_privacy_mode = 1"
|
||||
$configfile | Out-File C:\ProgramData\Parsec\config.txt -Encoding ascii
|
||||
Copy-Item -Path "C:\ProgramData\Easy-GPU-P\Parsec.lnk" -Destination "C:\Users\Public\Desktop"
|
||||
Stop-Process parsecd -Force
|
||||
}
|
||||
|
||||
Function ParsecVDDMonitorSetupScheduledTask {
|
||||
$XML = @"
|
||||
<?xml version="1.0" encoding="UTF-16"?>
|
||||
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
||||
<RegistrationInfo>
|
||||
<Description>Monitors the state of Parsec Virtual Display and repairs if broken</Description>
|
||||
<URI>\Monitor Parsec VDD State</URI>
|
||||
</RegistrationInfo>
|
||||
<Triggers>
|
||||
<LogonTrigger>
|
||||
<Enabled>true</Enabled>
|
||||
<UserId>$(([System.Security.Principal.WindowsIdentity]::GetCurrent()).Name)</UserId>
|
||||
<Delay>PT2M</Delay>
|
||||
</LogonTrigger>
|
||||
</Triggers>
|
||||
<Principals>
|
||||
<Principal id="Author">
|
||||
<UserId>$(([System.Security.Principal.WindowsIdentity]::GetCurrent()).User.Value)</UserId>
|
||||
<LogonType>S4U</LogonType>
|
||||
<RunLevel>HighestAvailable</RunLevel>
|
||||
</Principal>
|
||||
</Principals>
|
||||
<Settings>
|
||||
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
|
||||
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
|
||||
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
|
||||
<AllowHardTerminate>true</AllowHardTerminate>
|
||||
<StartWhenAvailable>false</StartWhenAvailable>
|
||||
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
|
||||
<IdleSettings>
|
||||
<StopOnIdleEnd>true</StopOnIdleEnd>
|
||||
<RestartOnIdle>false</RestartOnIdle>
|
||||
</IdleSettings>
|
||||
<AllowStartOnDemand>true</AllowStartOnDemand>
|
||||
<Enabled>true</Enabled>
|
||||
<Hidden>false</Hidden>
|
||||
<RunOnlyIfIdle>false</RunOnlyIfIdle>
|
||||
<WakeToRun>false</WakeToRun>
|
||||
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
|
||||
<Priority>7</Priority>
|
||||
</Settings>
|
||||
<Actions Context="Author">
|
||||
<Exec>
|
||||
<Command>C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe</Command>
|
||||
<Arguments>-file %programdata%\Easy-GPU-P\VDDMonitor.ps1</Arguments>
|
||||
</Exec>
|
||||
</Actions>
|
||||
</Task>
|
||||
"@
|
||||
|
||||
try {
|
||||
Get-ScheduledTask -TaskName "Monitor Parsec VDD State" -ErrorAction Stop | Out-Null
|
||||
Unregister-ScheduledTask -TaskName "Monitor Parsec VDD State" -Confirm:$false
|
||||
}
|
||||
catch {}
|
||||
$action = New-ScheduledTaskAction -Execute 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe' -Argument '-file %programdata%\Easy-GPU-P\VDDMonitor.ps1'
|
||||
$trigger = New-ScheduledTaskTrigger -AtStartup
|
||||
Register-ScheduledTask -XML $XML -TaskName "Monitor Parsec VDD State" | Out-Null
|
||||
}
|
||||
Function VBCableInstallSetupScheduledTask {
|
||||
$XML = @"
|
||||
<?xml version="1.0" encoding="UTF-16"?>
|
||||
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
||||
<RegistrationInfo>
|
||||
<Description>Install VB Cable</Description>
|
||||
<URI>\Install VB Cable</URI>
|
||||
</RegistrationInfo>
|
||||
<Triggers>
|
||||
<LogonTrigger>
|
||||
<Enabled>true</Enabled>
|
||||
<UserId>$(([System.Security.Principal.WindowsIdentity]::GetCurrent()).Name)</UserId>
|
||||
<Delay>PT2M</Delay>
|
||||
</LogonTrigger>
|
||||
</Triggers>
|
||||
<Principals>
|
||||
<Principal id="Author">
|
||||
<UserId>$(([System.Security.Principal.WindowsIdentity]::GetCurrent()).User.Value)</UserId>
|
||||
<LogonType>S4U</LogonType>
|
||||
<RunLevel>HighestAvailable</RunLevel>
|
||||
</Principal>
|
||||
</Principals>
|
||||
<Settings>
|
||||
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
|
||||
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
|
||||
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
|
||||
<AllowHardTerminate>true</AllowHardTerminate>
|
||||
<StartWhenAvailable>false</StartWhenAvailable>
|
||||
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
|
||||
<IdleSettings>
|
||||
<StopOnIdleEnd>true</StopOnIdleEnd>
|
||||
<RestartOnIdle>false</RestartOnIdle>
|
||||
</IdleSettings>
|
||||
<AllowStartOnDemand>true</AllowStartOnDemand>
|
||||
<Enabled>true</Enabled>
|
||||
<Hidden>false</Hidden>
|
||||
<RunOnlyIfIdle>false</RunOnlyIfIdle>
|
||||
<WakeToRun>false</WakeToRun>
|
||||
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
|
||||
<Priority>7</Priority>
|
||||
</Settings>
|
||||
<Actions Context="Author">
|
||||
<Exec>
|
||||
<Command>C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe</Command>
|
||||
<Arguments>-file %programdata%\Easy-GPU-P\VBCableInstall.ps1</Arguments>
|
||||
</Exec>
|
||||
</Actions>
|
||||
</Task>
|
||||
"@
|
||||
|
||||
try {
|
||||
Get-ScheduledTask -TaskName "Install VB Cable" -ErrorAction Stop | Out-Null
|
||||
Unregister-ScheduledTask -TaskName "Install VB Cable" -Confirm:$false
|
||||
}
|
||||
catch {}
|
||||
$action = New-ScheduledTaskAction -Execute 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe' -Argument '-file %programdata%\Easy-GPU-P\VBCableInstall.ps1'
|
||||
$trigger = New-ScheduledTaskTrigger -AtStartup
|
||||
Register-ScheduledTask -XML $XML -TaskName "Install VB Cable" | Out-Null
|
||||
}
|
||||
Function ParsecVDDInstallSetupScheduledTask {
|
||||
$XML = @"
|
||||
<?xml version="1.0" encoding="UTF-16"?>
|
||||
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
||||
<RegistrationInfo>
|
||||
<Description>Install Parsec Virtual Display Driver</Description>
|
||||
<URI>\Install Parsec Virtual Display Driver</URI>
|
||||
</RegistrationInfo>
|
||||
<Triggers>
|
||||
<LogonTrigger>
|
||||
<Enabled>true</Enabled>
|
||||
<UserId>$(([System.Security.Principal.WindowsIdentity]::GetCurrent()).Name)</UserId>
|
||||
<Delay>PT2M</Delay>
|
||||
</LogonTrigger>
|
||||
</Triggers>
|
||||
<Principals>
|
||||
<Principal id="Author">
|
||||
<UserId>$(([System.Security.Principal.WindowsIdentity]::GetCurrent()).User.Value)</UserId>
|
||||
<LogonType>S4U</LogonType>
|
||||
<RunLevel>HighestAvailable</RunLevel>
|
||||
</Principal>
|
||||
</Principals>
|
||||
<Settings>
|
||||
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
|
||||
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
|
||||
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
|
||||
<AllowHardTerminate>true</AllowHardTerminate>
|
||||
<StartWhenAvailable>false</StartWhenAvailable>
|
||||
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
|
||||
<IdleSettings>
|
||||
<StopOnIdleEnd>true</StopOnIdleEnd>
|
||||
<RestartOnIdle>false</RestartOnIdle>
|
||||
</IdleSettings>
|
||||
<AllowStartOnDemand>true</AllowStartOnDemand>
|
||||
<Enabled>true</Enabled>
|
||||
<Hidden>false</Hidden>
|
||||
<RunOnlyIfIdle>false</RunOnlyIfIdle>
|
||||
<WakeToRun>false</WakeToRun>
|
||||
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
|
||||
<Priority>7</Priority>
|
||||
</Settings>
|
||||
<Actions Context="Author">
|
||||
<Exec>
|
||||
<Command>C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe</Command>
|
||||
<Arguments>-file %programdata%\Easy-GPU-P\ParsecVDDInstall.ps1</Arguments>
|
||||
</Exec>
|
||||
</Actions>
|
||||
</Task>
|
||||
"@
|
||||
|
||||
try {
|
||||
Get-ScheduledTask -TaskName "Install Parsec Virtual Display Driver" -ErrorAction Stop | Out-Null
|
||||
Unregister-ScheduledTask -TaskName "Install Parsec Virtual Display Driver" -Confirm:$false
|
||||
}
|
||||
catch {}
|
||||
$action = New-ScheduledTaskAction -Execute 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe' -Argument '-file %programdata%\Easy-GPU-P\ParsecVDDInstall.ps1'
|
||||
$trigger = New-ScheduledTaskTrigger -AtStartup
|
||||
Register-ScheduledTask -XML $XML -TaskName "Install Parsec Virtual Display Driver" | Out-Null
|
||||
}
|
||||
|
||||
ParsecVDDMonitorSetupScheduledTask
|
||||
VBCableInstallSetupScheduledTask
|
||||
ParsecVDDInstallSetupScheduledTask
|
||||
|
||||
Start-ScheduledTask -TaskName "Install VB Cable"
|
||||
Start-ScheduledTask -TaskName "Install Parsec Virtual Display Driver"
|
||||
Start-ScheduledTask -TaskName "Monitor Parsec VDD State"
|
||||
4
User/psscripts.ini
Normal file
4
User/psscripts.ini
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
[Logon]
|
||||
0CmdLine=Install.ps1
|
||||
0Parameters=
|
||||
BIN
VMScripts/Parsec.lnk
Normal file
BIN
VMScripts/Parsec.lnk
Normal file
Binary file not shown.
BIN
VMScripts/ParsecPublic.cer
Normal file
BIN
VMScripts/ParsecPublic.cer
Normal file
Binary file not shown.
10
VMScripts/ParsecVDDInstall.ps1
Normal file
10
VMScripts/ParsecVDDInstall.ps1
Normal file
@ -0,0 +1,10 @@
|
||||
if (!(Get-WmiObject Win32_VideoController | Where-Object name -like "Parsec Virtual Display Adapter")) {
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://builds.parsec.app/vdd/parsec-vdd-0.37.0.0.exe", "C:\Users\$env:USERNAME\Downloads\parsec-vdd.exe")
|
||||
while (((Get-ChildItem Cert:\LocalMachine\TrustedPublisher) | Where-Object {$_.Subject -like '*Parsec*'}) -eq $NULL) {
|
||||
certutil -Enterprise -Addstore "TrustedPublisher" C:\ProgramData\Easy-GPU-P\ParsecPublic.cer
|
||||
Start-Sleep -s 5
|
||||
}
|
||||
Get-PnpDevice | Where-Object {$_.friendlyname -like "Microsoft Hyper-V Video" -and $_.status -eq "OK"} | Disable-PnpDevice -confirm:$false
|
||||
Start-Process "C:\Users\$env:USERNAME\Downloads\parsec-vdd.exe" -ArgumentList "/s"
|
||||
}
|
||||
|
||||
19
VMScripts/VBCableInstall.ps1
Normal file
19
VMScripts/VBCableInstall.ps1
Normal file
@ -0,0 +1,19 @@
|
||||
if (!(Get-WmiObject Win32_SoundDevice | Where-Object name -like "VB-Audio Virtual Cable")) {
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://download.vb-audio.com/Download_CABLE/VBCABLE_Driver_Pack43.zip", "C:\Users\$env:USERNAME\Downloads\VBCable.zip")
|
||||
New-Item -Path "C:\Users\$env:Username\Downloads\VBCable" -ItemType Directory| Out-Null
|
||||
Expand-Archive -Path "C:\Users\$env:USERNAME\Downloads\VBCable.zip" -DestinationPath "C:\Users\$env:USERNAME\Downloads\VBCable"
|
||||
$pathToCatFile = "C:\Users\$env:USERNAME\Downloads\VBCable\vbaudio_cable64_win7.cat"
|
||||
$FullCertificateExportPath = "C:\Users\$env:USERNAME\Downloads\VBCable\VBCert.cer"
|
||||
$VB = @{}
|
||||
$VB.DriverFile = $pathToCatFile;
|
||||
$VB.CertName = $FullCertificateExportPath;
|
||||
$VB.ExportType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert;
|
||||
$VB.Cert = (Get-AuthenticodeSignature -filepath $VB.DriverFile).SignerCertificate;
|
||||
[System.IO.File]::WriteAllBytes($VB.CertName, $VB.Cert.Export($VB.ExportType))
|
||||
while (((Get-ChildItem Cert:\LocalMachine\TrustedPublisher) | Where-Object {$_.Subject -like '*Vincent Burel*'}) -eq $NULL) {
|
||||
certutil -Enterprise -Addstore "TrustedPublisher" $VB.CertName
|
||||
Start-Sleep -s 5
|
||||
}
|
||||
Start-Process -FilePath "C:\Users\$env:Username\Downloads\VBCable\VBCABLE_Setup_x64.exe" -ArgumentList '-i','-h'
|
||||
}
|
||||
|
||||
19
VMScripts/VDDMonitor.ps1
Normal file
19
VMScripts/VDDMonitor.ps1
Normal file
@ -0,0 +1,19 @@
|
||||
$Global:VDD
|
||||
|
||||
Function GetVDDState {
|
||||
$Global:VDD = Get-PnpDevice | where {$_.friendlyname -like "Parsec Virtual Display Adapter"}
|
||||
}
|
||||
|
||||
While (1 -gt 0) {
|
||||
GetVDDSTate
|
||||
If ($Global:VDD -eq $NULL){
|
||||
Exit
|
||||
}
|
||||
Do {
|
||||
Enable-PnpDevice -InstanceId $Global:VDD.InstanceId -Confirm:$false
|
||||
Start-Sleep -s 5
|
||||
GetVDDState
|
||||
}
|
||||
Until ($Global:VDD.Status -eq 'OK')
|
||||
Start-Sleep -s 10
|
||||
}
|
||||
204
autounattend.xml
Normal file
204
autounattend.xml
Normal file
@ -0,0 +1,204 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<unattend xmlns="urn:schemas-microsoft-com:unattend">
|
||||
<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>GPUP122</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>
|
||||
<Display>
|
||||
<ColorDepth>32</ColorDepth>
|
||||
<HorizontalResolution>1920</HorizontalResolution>
|
||||
<RefreshRate>60</RefreshRate>
|
||||
<VerticalResolution>1080</VerticalResolution>
|
||||
</Display>
|
||||
<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>
|
||||
Loading…
x
Reference in New Issue
Block a user