ISO to USB V2.1

There are a lot of ISO burning tools out there and some work but some have issues with specific ISO files so I decided to make my own using powershell. To use it you simply browse to your ISO file then type in the driver letter you want the ISO to be burnt to.

If you dint want to mess with the PwoerShell code you can get an exe version of the tool from HERE




<#

.SYNOPSIS
Script to create a bootable flashdrive from a ISO

.DESCRIPTION
The script will launch a GUI. From the interafece you will be shown all of the drive on your computer
first you 

.NOTES
Created By: Kris Gross
Contact: KrisGross@sccmtst.com
Twitter: @kmgamd


.LINK
http://sccmtst.com

#>

#Gets the volume info
Function Get-Vol {
Get-Volume | Select-Object -Property DriveLetter, FileSystem, Drivetype |
Where-Object {$_.DriveLetter -ne $Null}
}

#Runs the Burn process
Function Run-BurnISO 
{

#Sets ISO file and disk letter
$iso = $textbox1.Text
$disk = $textBox3.Text
#Gets the disk number for diskpart
$DriveNumber = (Get-Partition -DriveLetter $disk).DiskNumber
#Mounts the ISO file
Mount-DiskImage -ImagePath "$iso"
# Get-Disk $DriveNumber | Clear-Disk -RemoveData
Format-Volume -DriveLetter $disk -FileSystem FAT32 -NewFileSystemLabel USB

#gets the drive letter of where the ISO gets mounted to
$MountLetter = (Get-DiskImage $iso | Get-Volume).DriveLetter

#Sets Variable for copy process
$Source = $MountLetter + ":\"
$Destination = $disk + ":\"
$bootdir = $disk + ":"

#Makes the drive bootbale
bootsect.exe /nt60 $bootdir

$Source=$Source.tolower()
$Filelist = Get-Childitem $Source -Recurse
$Total = $Filelist.count
$Position = 0
foreach ($File in $Filelist)
 {
    $Filename=$File.Fullname.tolower().replace($Source,'')
    $DestinationFile=($Destination+$Filename)
    $Label4.text = "Copying $File"
 Copy-Item $File.FullName $DestinationFile -Force
    $Position++
    $Percentage = (($Position/$Total)*100)
    $PB.Value = $Percentage
    Start-Sleep -Milliseconds 150
 }

#Dismounts the ISO file
Dismount-DiskImage -ImagePath "$iso"

[System.Windows.Forms.MessageBox]::Show("Your USB Drive is ready to use.")
}

#Opend the file broswser to select your ISO File
Function Get-FilePath{
[CmdletBinding()]
Param(
    [String]$Filter = "|*.ISO",
    [String]$InitialDirectory = "C:\")

    [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $InitialDirectory
    $OpenFileDialog.filter = $Filter
    [void]$OpenFileDialog.ShowDialog()
    $OpenFileDialog.filename
    #Runs the form function over so the results are added to the text box
    $Form.Close()
    $Form.Dispose()
    Generate-Form
}

#Generates the form
Function Generate-Form {

#Needed for the form to show
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

#Set the standrads of the form window
$form = New-Object System.Windows.Forms.Form 
$form.Text = "ISOtoUSB - V 2.0.0.1"
$form.Size = New-Object System.Drawing.Size(460,380) 
$form.StartPosition = "CenterScreen"

#sets the ok button
$BurnButton = New-Object System.Windows.Forms.Button
$BurnButton.Location = New-Object System.Drawing.Point(25,250)
$BurnButton.Size = New-Object System.Drawing.Size(75,23)
$BurnButton.Text = "Burn"
$BurnButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $BurnButton
$BurnButton.Add_Click({Run-BurnISO})

#sets the cancel Button
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(125,250)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton

#sets the Browse Button
$BrowseButton = New-Object System.Windows.Forms.Button
$BrowseButton.Location = New-Object System.Drawing.Point(320,160)
$BrowseButton.Size = New-Object System.Drawing.Size(75,23)
$BrowseButton.Text = "Browse"
$BrowseButton.DialogResult = [System.Windows.Forms.DialogResult]::Yes
$form.AcceptButton = $BrowseButton
$BrowseButton.Add_Click({$textBox1.Text = Get-FilePath -InitialDirectory "$env:UserProfile\Desktop"})

#Text box for ISO file location
$textBox1 = New-Object System.Windows.Forms.TextBox 
$textBox1.Location = New-Object System.Drawing.Point(24,165)
$textBox1.Size = New-Object System.Drawing.Size(260,22)
$textBox1.Font = 'Lucida Console' 
$textBox1.Text = $OpenFileDialog.filename

#Sets the avalibale drives
$textBox2 = New-Object System.Windows.Forms.TextBox
$textBox2.Location = New-Object System.Drawing.Point(24,40) 
$textBox2.Size = New-Object System.Drawing.Size(400,100)
$textBox2.ReadOnly = $True
$textBox2.Multiline = $True
$textBox2.Font = 'Lucida Console'
$textBox2.Text = Get-Vol | Format-Table | Out-String

#Sets the entry box for Drive letter
$textBox3 = New-Object System.Windows.Forms.TextBox
$textBox3.Location = New-Object System.Drawing.Point(24,210)
$textBox3.Size = New-Object System.Drawing.Size(260,22)
$textBox3.Font = 'Lucida Console'
$textBox3.Text = "Type the drive letter only"

#Create a ProgressBar 
$PB = New-Object System.Windows.Forms.ProgressBar
$PB.Name = "PowerShellProgressBar"
$PB.Size = New-Object System.Drawing.Size(400,20)
$PB.Location = New-Object System.Drawing.Point(25,300)
$PB.Value = 0
$PB.Style="Continuous"

#Label for Drive letter selcetion
$label1 = New-Object System.Windows.Forms.Label
$label1.Location = New-Object System.Drawing.Point(24,190)
$label1.Size = New-Object System.Drawing.Size(280,13) 
$label1.Text = "2. Drive:"

#label for ISO path text box
$label2 = New-Object System.Windows.Forms.Label
$label2.Location = New-Object System.Drawing.Point(24,145)
$label2.Size = New-Object System.Drawing.Size(280,13) 
$label2.Text = "1. ISO File:"

#lable for avaliable drives
$label3 = New-Object System.Windows.Forms.Label
$label3.Location = New-Object System.Drawing.Point(24,20) 
$label3.Size = New-Object System.Drawing.Size(280,13) 
$label3.Text = "Avaliable Drives:"

$Label4 = New-Object System.Windows.Forms.Label
$Label4.Location = New-Object System.Drawing.Point(25,280)
$Label4.Size = New-Object System.Drawing.Size(280,13)
$Label4.Text = ""

#add all resorces of the form 
$form.Controls.Add($BurnButton)
$form.Controls.Add($CancelButton)
$form.Controls.Add($BrowseButton)
$form.Controls.Add($objDrives)
$form.Controls.Add($textBox1)
$form.Controls.Add($label1) 
$form.Controls.Add($label2) 
$form.Controls.Add($textBox2)
$form.Controls.Add($textBox3)
$form.Controls.Add($label3)
$form.Controls.Add($label4)
$form.Controls.Add($PB)

#Show the Form 
 $form.Topmost = $True
 [void]$form.ShowDialog()
}

#Call the Function 
Generate-Form
 

Popular posts from this blog

SCCM Task Sequence GUI - How to set up the TS to work with a GUI

SCCM Applications vs. SCCM Packages: Understanding the Key Differences

How to Deploy a Windows 10 Servicing update as a Application