Inhaltsverzeichnis
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!