Public/New-OSBMediaUSB.ps1
<# .SYNOPSIS Creates a bootable USB of any OSBuilder Media .DESCRIPTION Creates a bootable USB of any OSBuilder Media (OSMedia, OSBuilds, PEBuilds) .LINK https://www.osdeploy.com/osbuilder/docs/functions/media/new-osbmediausb .PARAMETER FullName Full Path of the OSBuilder Media .PARAMETER USBLabel Label for the USB Drive #> function New-OSBMediaUSB { [CmdletBinding()] PARAM ( [Parameter(ValueFromPipelineByPropertyName)] [string]$FullName, [ValidateLength(1,11)] [string]$USBLabel ) BEGIN { #Write-Host '========================================================================================' -ForegroundColor DarkGray #Write-Host "$($MyInvocation.MyCommand.Name) BEGIN" -ForegroundColor Green #=================================================================================================== Write-Verbose '19.1.1 Validate Administrator Rights' #=================================================================================================== if (!([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Warning 'OSBuilder: This function needs to be run as Administrator' Return } #=================================================================================================== Write-Verbose '19.1.1 Initialize OSBuilder' #=================================================================================================== Get-OSBuilder -CreatePaths -HideDetails #=================================================================================================== Write-Verbose '19.1.1 Gather All OS Media' #=================================================================================================== $AllOSMedia = @() $AllOSMedia = $(Get-OSMedia) $AllOSBuild = @() $AllOSBuild = $(Get-OSBuilds) $AllPEBuild = @() $AllPEBuild = $(Get-PEBuilds) $AllOSBMedia = @() $AllOSBMedia = $AllOSMedia + $AllOSBuild + $AllPEBuild #$AllOSBMedia = $(Get-OSMedia) + $(Get-OSBuilds) + $(Get-PEBuilds) } PROCESS { Write-Host '========================================================================================' -ForegroundColor DarkGray Write-Host "$($MyInvocation.MyCommand.Name) PROCESS" -ForegroundColor Green Write-Warning "USB will be formatted FAT32" Write-Warning "Install.wim larger than 4GB will FAIL" #=================================================================================================== Write-Verbose '19.1.1 Select Source OSMedia' #=================================================================================================== $SelectedOSMedia = @() if ($FullName) { foreach ($Item in $FullName) { Write-Verbose "Checking $Item" $SelectedOSMedia += $AllOSBMedia | Where-Object {$_.FullName -eq $Item} } } else { $SelectedOSMedia = $AllOSBMedia | Out-GridView -Title "OSBuilder: Select one OSMedia to create an USB and press OK (Cancel to Exit)" -OutputMode Single } #=================================================================================================== Write-Verbose '19.1.1 Select USB Drive' #=================================================================================================== if (!($USBLabel)) { $USBLabel = 'OSBuilder' } $Results = Get-Disk | Where-Object {$_.Size/1GB -lt 33 -and $_.BusType -eq 'USB'} | Out-GridView -Title 'OSBuilder: Select a USB Drive to FORMAT' -OutputMode Single | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false -PassThru | New-Partition -UseMaximumSize -IsActive -AssignDriveLetter | Format-Volume -FileSystem FAT32 -NewFileSystemLabel $USBLabel if ($null -eq $Results) { Write-Warning "No USB Drive was Found or Selected" Return } else { #Make Bootable Set-Location -Path "$($SelectedOSMedia.FullName)\OS\boot" bootsect.exe /nt60 "$($Results.DriveLetter):" #Copy Files from ISO to USB Copy-Item -Path "$($SelectedOSMedia.FullName)\OS\*" -Destination "$($Results.DriveLetter):" -Recurse -Verbose } } END { #Write-Host '========================================================================================' -ForegroundColor DarkGray #Write-Host "$($MyInvocation.MyCommand.Name) END" -ForegroundColor Green } } |