PowerShell
Edit|Remove
Function GET-DISKPARTINFO() 
{ 
[cmdletbinding] 
# Build Script for LIST DISK in DISKPART 
 
new-item -Name listdisk.txt -Itemtype file -force | out-null 
add-content -path listdisk.txt "list disk" 
$listdisk=(diskpart /s listdisk.txt) 
 
# Get Total Disks outputted.   
# Yes.  It's as simple as "Count the lines on the screen" 
 
$totaldisk=$listdisk.count-9 
 
# Step through each line that will contain disk information 
for ($d=0;$d -lt $totaldisk;$d++) 
{ 
# Pull the Partition size data and the DiskNumber 
 
$size=$listdisk[8+$d].substring(25,9).replace(" ",""$diskid=$listdisk[8+$d].substring(7,5).trim() 
 
# Create a script to pull detail on the existing disk 
 
new-item -Name detail.txt -ItemType file -force | out-null 
add-content -Path detail.txt "select disk $diskid" 
add-content -Path detail.txt "detail disk" 
 
# Capture the output from Diskpart for the Detail 
 
$Detail=(diskpart /s detail.txt) 
 
# Parse the data for the partition 
 
$Model=$detail[8] 
$type=$detail[10].substring(9) 
$DriveLetter=$detail[-1].substring(15,1) 
 
# Grab the partition sizing data 
 
$length=$size.length 
$multiplier=$size.substring($length-2,2) 
$intsize=$size.substring(0,$length-2) 
 
# Convert the Partition "KB/MB/GB" to a real value 
switch($multiplier) 
    { 
        KB { $mult=1KB } 
        MB { $mult=1MB } 
        GB { $mult=1GB } 
    } 
 
# Calculate the size of the Disk or Partition 
$disktotal=([convert]::ToInt16($intsize,10))*$mult 
 
# Return the Object back to the real world Neo 
[pscustomobject]@{DiskNum=$diskid;Model=$model;Type=$type;DiskSize=$disktotal;DriveLetter=$DriveLetter} 
} 
} 
Function INVOKE-USBBOOT() 
{ 
[cmdletbinding] 
$info=GET-DISKPARTINFO 
$drivelist=$info | where { $_.Type -eq 'USB' -and $_.DiskSize -gt 7.5GB -and $_.DiskSize -lt 128GB } 
New-Item -Path bootemup.txt -ItemType file -force | OUT-NULL 
 
$drivelist | foreach { 
$DiskNum=$_.DiskNum 
ADD-CONTENT -Path bootemup.txt -Value "SELECT DISK $DiskNum" 
ADD-CONTENT -Path bootemup.txt -Value "CLEAN" 
ADD-CONTENT -Path bootemup.txt -Value "CREATE PARTITION PRIMARY" 
ADD-CONTENT -Path bootemup.txt -Value "FORMAT FS=FAT32 QUICK" 
ADD-CONTENT -Path bootemup.txt -Value "ASSIGN" 
ADD-CONTENT -Path bootemup.txt -value "ACTIVE" 
} 
# If you would like to have Diskpart AUTOMATICALLY 
# Create the Bootable USB keys uncomment the line below 
# 
# WARNING! If you do this, the Process becomes 100%  
# automated on the machine in question.   Be CERTAIN before 
# Doing this.   It is only saving you one line of typing on your computer 
# 
# Danger Will Robinson when you UnComment the line below 
# DISKPART /S bootemup.txt 
} 
EXPORT-MODULEMEMBER -function * 
*** Note Errors corrected from comments provided by users.  Thanks! ***
 This is a small module that enables two new cmdlets
GET-DISKPARTINFO
INVOKE-USBBOOT

GET-DISKPARTINFO will parse DISKPART and return it's information as a PowerShell object

INVOKE-USBBOOT will create DISKPART scripts to make attached USB drives bootable

Leveraging these Cmdlets will allow you to plug in a series of USB flash keys and make them bootable

You can also access the drive letters for the use of applications like Robocopy.

The Query is slow as is accesses DISKPART who's enumeration seems a bit slow