87 lines
2.7 KiB
PowerShell
87 lines
2.7 KiB
PowerShell
#Requires -RunAsAdministrator
|
|
|
|
$RemoteURL = $args[0]
|
|
$StagingDir = $PSScriptRoot
|
|
|
|
#Disable progress bars to make Invoke-WebRequest actually fast
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
# Download compressed boot dir to Staging Dir
|
|
Write-Host "Downloading boot.zip"
|
|
Invoke-WebRequest -Uri $RemoteURL/boot.zip -OutFile $StagingDir\boot.zip
|
|
|
|
# Expand boot.zip to C:\Boot
|
|
Expand-Archive -Path $StagingDir\boot.zip -DestinationPath C:\ -Force
|
|
|
|
# Download WinPE wim to C:\Sources\boot.wim
|
|
Write-Host "Downloading boot.wim"
|
|
Invoke-WebRequest -Uri $RemoteURL/boot.wim -OutFile C:\Sources\boot.wim
|
|
|
|
# Setup booting to PE next boot
|
|
|
|
function BootToPE {
|
|
|
|
<#
|
|
|
|
.Synopsis
|
|
This script will create a ramdisk containing the boot.wim which the computer will boot to on restart. This script will work only on Windows Imaging environment.
|
|
|
|
.Prerequisites
|
|
- From the Windows PE boot USB, copy boot.wim in the Sources folder to C:\Sources on the target
|
|
- From the Windows PE boot USB, copy the Boot folder to C:\ on the target
|
|
|
|
.Notes
|
|
Because "bcdedit /bootsequence" is used, the computer should boot back into Windows when restarted if imaging is cancelled.
|
|
|
|
#>
|
|
|
|
# Checks that Disk 0 is the boot disk.
|
|
$DISKZERO = Get-Disk 0
|
|
If ($DISKZERO.IsBoot -ne $true) {
|
|
Write-Host "Disk 0 is not the boot disk. Exiting..."
|
|
Exit 999
|
|
}
|
|
else {
|
|
Write-Host "Disk 0 is the boot disk. Proceeding..."
|
|
}
|
|
|
|
# Create {ramdiskoptions} and configure
|
|
bcdedit -create "{ramdiskoptions}"
|
|
bcdedit /set "{ramdiskoptions}" ramdisksdidevice partition=C:
|
|
bcdedit /set "{ramdiskoptions}" ramdisksdipath \boot\boot.sdi
|
|
|
|
# Add LiteTouch boot device to OSLOADER
|
|
$Output = bcdedit -create /d "LiteTouch MDT" /application OSLOADER
|
|
|
|
# Obtain LiteTouch boot device GUID
|
|
$LTGUID = $Output | %{ $_.split(' ')[2] }
|
|
|
|
# Configure LiteTouch to ramdisk boot
|
|
bcdedit /set $LTGUID device "ramdisk=[C:]\sources\boot.wim,{ramdiskoptions}"
|
|
bcdedit /set $LTGUID osdevice "ramdisk=[C:]\sources\boot.wim,{ramdiskoptions}"
|
|
bcdedit /set $LTGUID systemroot \windows
|
|
bcdedit /set $LTGUID detecthal yes
|
|
bcdedit /set $LTGUID winpe yes
|
|
|
|
# Adjust for UEFI vs Legacy BIOS types
|
|
if ($env:firmware_type -eq 'UEFI'){
|
|
Write-Host "UEFI boot confirmed."
|
|
bcdedit /set $LTGUID path \windows\system32\boot\winload.efi
|
|
}
|
|
Else {
|
|
Write-Host "Legacy boot confirmed."
|
|
bcdedit /set $LTGUID path \windows\system32\boot\winload.exe
|
|
}
|
|
|
|
# Force LiteTouch ramdisk on next boot and restart
|
|
bcdedit /bootsequence $LTGUID
|
|
shutdown /r /f /t 0
|
|
|
|
}
|
|
|
|
$answer = read-host "Demo armed. Ready to reboot? (y/n)"
|
|
if ($answer -eq 'y') {
|
|
BootToPE
|
|
} else {
|
|
Remove-Item -Path $StagingDir -Recurse
|
|
} |