Public/WinPE/Use-WinPEContent.ps1
function Use-WinPEContent { [CmdletBinding()] param ( [ValidateSet('*','Drivers','Files','Modules','Registry','Scripts')] [string[]]$Content = '*' ) #====================================================================================================== # Require WinPE #====================================================================================================== if ((Get-OSDGather -Property IsWinPE) -eq $false) { Write-Warning "$($MyInvocation.MyCommand) must be run in WinPE" Break } #====================================================================================================== # PSDrive #====================================================================================================== $GetPSDrive = Get-PSDrive -PSProvider 'FileSystem' foreach ($Item in $Content) { #====================================================================================================== # Drivers #====================================================================================================== if ($Item -eq '*' -or $Item -eq 'Drivers') { foreach ($PSDrive in $GetPSDrive) { $ContentPath = @("$($PSDrive.Root)Content\Drivers","$($PSDrive.Root)WinPE\Drivers") foreach ($ContentItem in $ContentPath) { if (Test-Path "$ContentItem") { Get-ChildItem "$ContentItem" *.inf -Recurse | ` ForEach-Object { Write-Verbose "Importing Driver $($_.FullName)" PNPUtil.exe /add-driver "$($_.FullName)" /install } } } } } #====================================================================================================== # Files #====================================================================================================== if ($Item -eq '*' -or $Item -eq 'Files') { foreach ($PSDrive in $GetPSDrive) { $ContentPath = @("$($PSDrive.Root)Content\Files","$($PSDrive.Root)WinPE\Files") foreach ($ContentItem in $ContentPath) { if (Test-Path "$ContentItem") { Write-Verbose "Copying Files at $ContentItem to X:\" robocopy "$ContentItem" X:\ *.* /e /ndl /b } } } } #====================================================================================================== # Modules #====================================================================================================== if ($Item -eq '*' -or $Item -eq 'Modules') { foreach ($PSDrive in $GetPSDrive) { $ContentPath = @("$($PSDrive.Root)Content\Modules","$($PSDrive.Root)WinPE\Modules") foreach ($ContentItem in $ContentPath) { if (Test-Path "$ContentItem") { Get-ChildItem "$ContentItem" | ` Where-Object {$_.PSIsContainer} | ` ForEach-Object { Write-Verbose "Copying Module at $($_.FullName) to X:\Program Files\WindowsPowerShell\Modules" Copy-Item -Path "$($_.FullName)" -Destination "X:\Program Files\WindowsPowerShell\Modules" -Recurse -Force -ErrorAction SilentlyContinue Import-Module -Name "$($_.Name)" -Force -ErrorAction SilentlyContinue } } } } } #====================================================================================================== # Registry #====================================================================================================== if ($Item -eq '*' -or $Item -eq 'Registry') { foreach ($PSDrive in $GetPSDrive) { $ContentPath = @("$($PSDrive.Root)Content\Registry","$($PSDrive.Root)WinPE\Registry") foreach ($ContentItem in $ContentPath) { if (Test-Path "$ContentItem") { Get-ChildItem "$ContentItem" *.reg -Recurse | ` ForEach-Object { Write-Verbose "Importing Registry File $($_.FullName)" reg import "$($_.FullName)" } } } } } #====================================================================================================== # Scripts #====================================================================================================== if ($Item -eq '*' -or $Item -eq 'Scripts') { foreach ($PSDrive in $GetPSDrive) { $ContentPath = @("$($PSDrive.Root)Content\Scripts","$($PSDrive.Root)WinPE\Scripts") foreach ($ContentItem in $ContentPath) { if (Test-Path "$ContentItem") { Get-ChildItem "$ContentItem" *.ps1 -Recurse | ` ForEach-Object { Write-Verbose "Executing PowerShell Script $($_.FullName)" & "$($_.FullName)" -ErrorAction SilentlyContinue } } } } } } } |