/build/static/layout/Breadcrumb_cap_w.png

WinPE 10 Automated Image Creation

<#
Setup_w10.ps1

Build WinPE 10

http://en.community.dell.com/techcenter/enterprise-client/w/wiki/2065.dell-command-deploy-driver-packs-for-enterprise-client-os-deployment#winpe
http://technet.microsoft.com/en-us/library/hh825144.aspx
http://technet.microsoft.com/en-us/library/hh824926.aspx

ISO: makewinpemedia /iso c:\winpe_amd64 c:\winpe_amd64\winpe.iso
USB: makewinpemedia /ufd /f c:\winpe_amd64 <drive letter>:

Sailer, Adam
2017.11.28
#>


$invoke = split-path -path $myInvocation.myCommand.Path -parent
$os = gcim win32_OperatingSystem
$proc = gcim win32_Processor


$arch = if ($proc.AddressWidth -eq 64) { 'amd64' } else { 'x86' }


$dest = "$env:SystemDrive\winpe_$arch"
$mount = "$dest\mount"
$image = "$dest\media\sources\boot.wim"
$label = "WinPE 10 $arch"


$unattend = @"
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-Setup" processorArchitecture="$arch" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Display>
<ColorDepth>32</ColorDepth>
<HorizontalResolution>1440</HorizontalResolution>
<RefreshRate>60</RefreshRate>
<VerticalResolution>900</VerticalResolution>
</Display>
</component>
</settings>
</unattend>
"@


Function Prep
{
write-host "`n`n@@ Called Prep" -fore magenta


$path = if ($proc.AddressWidth -eq 64) { ${env:ProgramFiles(x86)} } else { $env:ProgramFiles }

$map = @{
'KitsRoot' = "$path\Windows Kits\10\";
'OSCDImgRoot' = "$path\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\$arch\Oscdimg";
'WinPERoot' = "$path\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment";
}

$array = $env:path.Split(';')

$map.keys | sort-object | % { $key = $_
$array += $map.$key; [System.Environment]::SetEnvironmentVariable($key, $map.$key, "process")
}

$array = $array | sort-object -unique; $array
$path = [string]::join(';', $array)
[System.Environment]::SetEnvironmentVariable('path', $path, 'process')
}


Function CopySource
{
write-host "`n`n@@ Called CopySource" -fore magenta

remove-item $dest -recurse -force -ea silentlyContinue
copype $arch $dest
}


Function MountCurrent
{
write-host "`n`n@@ Called MountCurrent" -fore magenta

mount-windowsImage -imagePath $image -index 1 -path $mount -verbose
}


Function DismountCurrent
{
write-host "`n`n@@ Called DismountCurrent" -fore magenta

if (get-windowsImage -mounted)
{ dismount-windowsImage -path $mount -save }
}


Function Packages
{
write-host "`n`n@@ called Packages" -fore magenta

$lang = 'en-us'

## order matters! http://technet.microsoft.com/en-us/library/hh824926.aspx

$order = @(
'winpe-wmi'
,'winpe-netfx'
,'winpe-scripting'
,'winpe-powershell'
,'winpe-dismcmdlets'
,'winpe-securebootcmdlets'
,'winpe-storagewmi'
,'winpe-securestartup'
,'winpe-hta'
,'winpe-fmapi'
)

$order | % { $item = $_

dir $env:WinPeRoot\$arch -recurse -include "$($_).cab", "$($_)_$($lang).cab" | sort-object -descending | % {

write-host "`n$($_.Name)" -fore cyan; add-windowsPackage -path $mount -packagePath "$($_.FullName)"
}
}
}


Function Drivers
{
write-host "`n`n@@ called Drivers" -fore magenta

dism /image:$mount /add-driver /driver:$invoke\drivers\shared /recurse
dism /image:$mount /add-driver /driver:$invoke\drivers\$arch /recurse
}


Function Apps
{
write-host "`n`n@@ Called Apps" -fore magenta

copy-item $invoke\winpe_.jpg $mount\windows\system32\winpe_.jpg -force -ea silentlyContinue

reg load hklm\winpe "$dest\mount\windows\system32\config\default"

new-itemProperty -path 'HKLM:\winpe\Control Panel\Desktop' -name Wallpaper -value "%systemroot%\system32\winpe_.jpg" -propertyType String -force
new-itemProperty -path 'HKLM:\winpe\Control Panel\Desktop' -name MaxMonitorDimension -value 1920 -propertyType DWORD -force
new-itemProperty -path 'HKLM:\winpe\Control Panel\Desktop' -name MaxVirtualDesktopDimension -value 1920 -propertyType DWORD -force

reg unload hklm\winpe

copy-item $invoke\apps\$arch $mount\apps -recurse -ea silentlyContinue
$unattend | out-file -encoding ascii $mount\unattend.xml
}


Function Media
{
write-host "`n`n@@ Called Media" -fore magenta

makewinpemedia /iso $dest $dest\winpe_$arch.iso
}


#
#


Clear
Prep
DismountCurrent
CopySource
MountCurrent
Packages
Drivers
Apps
DismountCurrent
Media


Comments

This post is locked

Don't be a Stranger!

Sign up today to participate, stay informed, earn points and establish a reputation for yourself!

Sign up! or login

Share

 
This website uses cookies. By continuing to use this site and/or clicking the "Accept" button you are providing consent Quest Software and its affiliates do NOT sell the Personal Data you provide to us either when you register on our websites or when you do business with us. For more information about our Privacy Policy and our data protection efforts, please visit GDPR-HQ