Wie in der Kurzmitteilung Windows 7 SP1 Convenience Rollup integrieren angekündigt, werde ich im Folgenden einen bootfähigen USB-Stick mit PowerShell erstellen. Teile des Scripts habe ich von hier: New-BootableUSB. Damit funktionieren nur ISO-Dateien als Quelle. Ich habe das Script von Anfang an neu geschrieben, Windows-Installationsdateien in einem Ordner hinzugefügt und den Kopiervorgang anders gemacht.
Function New-BootableUSBDevice {
<# .SYNOPSIS
Zum Erstellen eines startfähigen USB-Sticks.
.DESCRIPTION
Diese Funktion erstellt aus einer ISO-Datei oder eines Ordners einen startfähigen USB-Stick.
.PARAMETER
ImagePath
Pfad zu den Windows-Installationsdateien oder zur ISO-Datei.
.PARAMETER
USBDriveLetter
Laufwerksbuchstabe des USB-Sticks.
.PARAMETER
FileSystemType
Dateisystem für den USB-Stick. Standardeinstellung ist FAT32.
.EXAMPLE
New-BootableUSB -ImagePath "C:\Daten\SW_DVD5_WIN_ENT_10_1607_64BIT_German_MLF_X21-07112.ISO" -USBDriveLetter "D" -FileSystemType FAT32
Erstellt von der angegebenen ISO-Datei einen mit FAT32 formatierten, bootfähigen USB-Stick.
.NOTES
Erstellt von Dietmar Haimann, Januar 2017
.LINK
https://www.einfaches-netzwerk.at/ #>
[CmdletBinding()]
param (
[Parameter(Mandatory=$True)]
[ValidateScript({ If (Test-Path $_ -Include *.iso) {$true} Else {Test-Path $_ -PathType Container} })]
[string]$ImagePath,
[Parameter(Mandatory=$True)]
[ValidateLength(1,1)]
[String]$USBDriveLetter,
[Parameter(Mandatory=$True)]
[ValidateSet("FAT32","NTFS")]
[String]$FileSystemType = "FAT32"
)
Begin {
$USBDriveLetter = $USBDriveLetter.ToUpper()
If (!((Get-Volume | Where DriveType -eq Removable | Select -ExpandProperty DriveLetter) -contains $USBDriveLetter)) {
Write-Host ('{0} ist kein USB-Device.' -f $USBDriveLetter) -ForegroundColor Red
Break
}
Else {
Write-Host ('{0} ist ein USB-Device.' -f $USBDriveLetter) -ForegroundColor Green
}#If
If (!(Test-Path $ImagePath)) {
Write-Host ('Auf {0} kann nicht zugegriffen werden.' -f $ImagePath) -ForegroundColor Red
Break
}
Else {
Write-Host ('Auf {0} kann zugegriffen werden.' -f $ImagePath) -ForegroundColor Green
}#If
If (Test-Path $ImagePath -Include "*.iso") {
$IsISO = $true
Write-Host ('{0} ist eine ISO-Datei.' -f $ImagePath) -ForegroundColor Green
}
Else {
$IsISO = $false
Write-Host ('{0} ist ein Windows-Ordner.' -f $ImagePath) -ForegroundColor Green
If (!($ImagePath.EndsWith('\'))) {
$Source = $ImagePath + "\*"
}
Else {
$Source = $ImagePath + "*"
}#If
}#If
}#Begin
Process {
Try {
$Backup = $ErrorActionPreference
$ErrorActionPreference = 'Stop'
$Disk = Get-Disk | Where-Object BusType -EQ "USB"
$Disk | Clear-Disk -RemoveData -Confirm:$false
$Disk | New-Partition -UseMaximumSize -IsActive -DriveLetter $USBDriveLetter
Format-Volume -DriveLetter $USBDriveLetter -FileSystem $FileSystemType -Confirm:$false -Force
}#Try
Catch {
Write-Host "Error: $_" -ForegroundColor Red
Write-Host "Das Script wird abgebrochen." -ForegroundColor Red
Break
}#Catch
Finally {
$ErrorActionPreference = $Backup
}#Finally
If ($IsISO) {
If (!(Get-DiskImage -ImagePath $ImagePath | Get-Volume)) {
$DiskMounted = $false
Try {
$Backup = $ErrorActionPreference
$ErrorActionPreference = 'Stop'
Mount-DiskImage -ImagePath $ImagePath
$DiskMounted = $true
Write-Host ('Das Image {0} konnte geladen werden.' -f $ImagePath) -ForegroundColor Green
}#Try
Catch {
Write-Host "Error: $_" -ForegroundColor Red
Write-Host "Das Script wird abgebrochen." -ForegroundColor Red
Break
}#Catch
Finally {
$ErrorActionPreference = $Backup
}#Finally
}
Else {
Write-Host ('Das Image {0} ist bereits geladen.' -f $ImagePath) -ForegroundColor Green
}#If
$Source = ((Get-DiskImage -ImagePath $ImagePath | Get-Volume).DriveLetter) + ":\*"
}#If
$USBDestination = $USBDriveLetter + ":\"
Try {
$Backup = $ErrorActionPreference
$ErrorActionPreference = 'Stop'
Write-Host ('Dateien werden von {0} nach {1} kopiert. USB-Stick nicht vom Computer trennen!'-f $Source, $USBDestination) -ForegroundColor Yellow
Copy-Item -Path $Source -Destination $USBDestination -Recurse -Force
}#Try
Catch {
Write-Host "Error: $_" -ForegroundColor Red
Write-Host "Das Script wird abgebrochen." -ForegroundColor Red
Break
}#Catch
Finally {
$ErrorActionPreference = $Backup
}#Finally
}#Process
End {
If($DiskMounted) {
Dismount-DiskImage -ImagePath $ImagePath
}#If
Write-Host ('Erstellung des bootfähigen USB-Sticks abgeschlossen!') -ForegroundColor Green
}#End
}#Function
Das Script unterstützt ISO-Datenträger und Windows-Installationsdateien in einem Ordner, wie es bei oben genanntem Beitrag der Fall ist.
PowerShell-Script als Modul speichern
Wer öfters Windows von einem USB-Stick starten muss, kann das Powershell-Script als Modul abspeichern und in den PowerShell-Ordner kopieren. Danach steht die Funktion sofort zur Verfügung. Wichtig ist, dass der Ordner und die Datei den gleichen Namen haben.
- Windows PowerShell ISE starten
- Das Script kopieren und in Windows PowerShell ISE einfügen
- File > Save As…
- Save As
- Zum Pfad C:\Program Files\WindowsPowerShell\Modules\ navigieren
- Dort den Ornder New-BootableUSBDevice erstellen und hinein navigieren
- File name: New-BootableUSBDevice
- Save as type: PowerShell Script Modules (*.psm1) > Save
- Windows PowerShell ISE schließen
Einen bootfähigen USB-Stick mit PowerShell erstellen
Als nächstes werde ich die Windows-Installationsdateien vom Beitrag Windows 7 SP1 Convenience Rollup integrieren vom USB-Stick startbar machen.
- PowerShell als Administator starten
- Mit folgendem Befehl die Funktion New-BootableUSBDevice ausführen
New-BootableUSBDevice -ImagePath C:\W7SP1 -USBDriveLetter E -FileSystemType FAT32
- Der Vorgang dauert nur kurz, je nach Schreibleistung des USB-Sticks
Die manuelle Variante
Die wesentlichen Befehle lassen sich auf fünf Zeilen komprimieren, welche man schnell auswendig eintippen kann. Schritt für Schritt:
- USB-Stick anstecken
- Optional: ISO-Datei einbinden
- PowerShell als Administrator starten
- Mit folgendem Befehl die Informationen zum USB-Stick in der Variable $Disk speichern
$Disk = Get-Disk | Where-Object BusType -EQ "USB"
- Mit folgendem Befehl den USB-Stick löschen
$Disk | Clear-Disk -RemoveData -Confirm:$false
- Mit folgendem Befehl eine Partition erstellen
$Disk | New-Partition -UseMaximumSize -IsActive -DriveLetter E
- Mit folgendem Befehl den USB-Stick formatieren
Format-Volume -DriveLetter E -FileSystem FAT32 -Confirm:$false -Force
- Und zum Schluss die Dateien kopieren
Copy-Item -Path C:\W7SP1\* -Destination E:\ -Recurse -Force
Funktioniert genauso einfach, wenn man es nicht oft braucht.
Vielen Dank für’s Lesen!
Bootfähigen USB-Stick mit PowerShell erstellen was last modified: Oktober 18th, 2018 by Dietmar Haimann