New-OSDBoot.usb

So I need to create a new function in the OSD Module to create a Dual Partition USB for OSDcloud. So this page will be the process of how I create one for the OSD Module. Keep in mind, by no means am I a PowerShell expert ... I'm still learning

Requirements

So here are the requirements for creating a New-OSDBoot.usb

  • Must run as Admin

  • Require Windows 10

  • PowerShell 5+

  • Windows 10 1703+

  • USB Drive > 8GB

    • 4GB ESD + some room for Drivers, etc

The Old Code

So I already have a script to handle the requirements, and I'm not trying to make you go blind, but this requires 92 lines. I used to copy/paste similar steps in new code, but that's not the point of the OSD Module

The New Code

As you can see I ended up putting all of those checks in new functions making things very easy to code in just 11 lines in the Function

function New-OSDBoot.usb {
    [CmdletBinding()]
    param ()
    Block-WinPE
    Block-NonAdmin
    Block-WindowsMajorLt10
    Block-PowerShellVersionLt5
    Block-WindowsReleaseIdLt1703
    $SelectUSBDisk = Select-USBDisk -MinimumSizeGB 8
    Return Get-USBDisk -Number $SelectUSBDisk.Number
}

The Block

The improvements continue when you look at the new Block functions in the #OSD Module by using PSCallStack, which really makes this small Block function easy to reuse in other Functions

function Block-NonAdmin {
    [CmdletBinding()]
    param ()
    $FirstParty = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $FirstParty requires Admin Rights"

    if ((Get-OSDGather -Property IsAdmin) -eq $false) {
        Write-Warning $Message; Break
    }
}

The Build

Last updated