# encoding: ascii
# api: powershell
# title: WinPE PushButton Reset
# description: Push Button Reset Script for Configuration Manager Task Sequences.
# version: 1.0
# type: script
# author: BillAMoore
# license: CC0
# x-poshcode-id: 5165
# x-archived: 2014-05-20T23:28:16
# x-published: 2014-05-18T05:41:00
#
#
<#
.SYNOPSIS
WinPE Push Button Reset
.DESCRIPTION
This script will create a push button reset environment for use with a Windows 8.x build using a Configuration
Manager Task Sequence. The process for building the environment needed to run this script sucessfully is documented
on my blog at http://www.billamoore.com/2014/03/13/powershell-automating-push-button-reset-configuration-manager/
.NOTES
There is currently a Connect Bug (ID875599) filed for the -CompressionType parameter which is presently excluded from
the New-WindowsImage command below. For now, no compression of the created wim is done. A DISM command could be substituted
where compression is a concern. (It is for me.) PBRExclusions.ini is simply a DISM ini which excludes certain directories.
Exclusion of _SMSTaskSequence would keep the wim clean for restore.
Because this image is not generalized it is not supported by Microsoft.
.AUTHOR
Bill A Moore (billamoore@gmail.com)
Version 1.0, May 18, 2014
Prerequisites: PowerShell v4.0
#>
# PARTITION DRIVE, CAPTURE IMAGE
Set-Partition -DiskNumber 0 -PartitionNumber 1 -NewDriveLetter T
Set-Partition -DiskNumber 0 -PartitionNumber 2 -NewDriveLetter S
Set-Partition -DiskNumber 0 -PartitionNumber 4 -NewDriveLetter W
New-Partition -DiskNumber 0 -UseMaximumSize -DriveLetter R | Format-Volume -FileSystem NTFS -NewFileSystemLabel "Recovery Image" -Confirm:$false
New-Item R:\RecoveryImage -Type directory
New-WindowsImage -ImagePath r:\RecoveryImage\install.wim -CapturePath W:\ -Name "Recovery Image" -ConfigFilePath X:\SMS\PKG\SMS10000\PBRExclusions.ini -NoRpFix
#COPY WIM AND RESIZE RECOVERY PARTITION TO RECOVER SPACE, SET PERMISSIONS
Copy-Item -Recurse -Path R:\RecoveryImage -Destination W:\
$Size = ( Get-ChildItem R:\RecoveryImage\ -Recurse -Force | Measure-Object -Property Length -Sum ).Sum + 500MB
Remove-Partition -DriveLetter R -Confirm:$false
$MaxSize = ( Get-PartitionSupportedSize -DriveLetter W ).sizeMax
Resize-Partition -DriveLetter W -Size ( $MaxSize - $Size )
New-Partition -DiskNumber 0 -UseMaximumSize -DriveLetter R -GptType '{de94bba4-06d1-4d40-a16a-bfd50179d6ac}' | Format-Volume -FileSystem NTFS -NewFileSystemLabel "Recovery Image" -Confirm:$false
Move-Item -Path W:\RecoveryImage R:\
CMD /c "W:\Windows\System32\icacls R:\RecoveryImage /inheritance:r /T"
CMD /c "W:\Windows\System32\icacls R:\RecoveryImage /grant:r SYSTEM:(F) /T"
CMD /c "W:\Windows\System32\icacls R:\RecoveryImage /grant:r *S-1-5-32-544:(F) /T"
CMD /c "W:\Windows\System32\reagentc /setosimage /path R:\RecoveryImage /target W:\Windows /index 1"
Copy-Item -Path X:\Windows\Temp\SMSTSLog\smsts.log -Destination W:\Logs\PEsmsts.log
Copy-Item -Path X:\Windows\Logs\DISM\dism.log -Destination W:\Logs\DISM.log