PowerShell を使ってWindows 用インストールUSBメモリを作る

以前投稿した記事「Windows 10 Build 10041をUSBメモリーからインストールしたい~Diskpart コマンド」はコマンド プロンプトを使ってWindows 用インストールUSBメモリーを作成しました。
今回はPowerShell を使ってWindows 用インストールUSBメモリを作成するスクリプトを書いてみました。
ドライブ レターなどパラメータを数個指定するだけで自動的にインストールUSBメモリーが出来上がります。

入力項目は4つ

  • USBメモリーのディスク番号
  • 作成するインストールUSBメモリーのラベル(最大11文字)
  • 作成するインストールUSBメモリーのドライブ レター
  • コピー元となるインストール メディアが入ったドライブ レター

New-WinUsbInstaller.ps1

#Requires -Version 3.0
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Create Windows USB Installer Script using PowerShell.
.EXAMPLE
C:\PS> .\New-WinUsbInstaller.ps1
.NOTES
2016/11/08 First Release.
#>
# -------------------------------------------------------------------
# Parameters
# -------------------------------------------------------------------
# Show Disk list
Get-Disk
# Input USB Memory's Disk Number
Write-Output "`nInput USB Memory's Disk Number."
$number = Read-Host "->"
if($number -eq ""){
Write-Output "No Input."
exit
}
elseif((Get-Disk | Measure-Object).Count -le $number){
Write-Output "Problem in the Disk Number."
exit
}
# Input USB Memory Disk's Label
Write-Output "`nInput USB Memory Label(11 to character)"
$label = Read-Host "->"
if($label.Length -gt 11){
Write-Output "Label is a maximum of 11 characters."
exit
}
elseif($label -eq ""){
$label = "volume"
}
# Input USB Memory Disk's Drive Letter
Write-Output "`nInput USB Memory Disk's Drive Letter(ex D)"
$usbDriveLetter = Read-Host "->"
if((Test-Path -path "$($usbDriveLetter):\") -eq $true){
Write-Output "Are you sure you want to format $($usbDriveLetter) drive?"
$input = Read-Host "Y(es) or N(o) ->"
if($input.ToUpper() -ne "Y" -and $input.ToUpper() -ne "Yes"){
Write-Output "Stop process."
exit
}
}
elseif($usbDriveLetter -eq ""){
Write-Output "No Input."
exit
}
# Input Install Media's Drive Letter
Write-Output "`nInput Install Media's Drive Letter(ex E)"
$installDriveLetter = Read-Host "->"
if((Test-Path -path "$($installDriveLetter):\") -eq $false){
Write-Output "Stop process."
exit
}
elseif($usbDriveLetter -eq ""){
Write-Output "No Input."
exit
}
# -------------------------------------------------------------------
# Format USB Memory Drive
# -------------------------------------------------------------------
try{
# Clean Disk
# https://technet.microsoft.com/en-us/library/hh848661.aspx
Write-Output "Clear Disk"
Clear-Disk -Number $number -RemoveData -RemoveOEM -Confirm:$false
# Initialize Disk
# https://technet.microsoft.com/ja-jp/library/hh848708(v=wps.630).aspx
Write-Output "Initialize Disk"
Initialize-Disk -PartitionStyle MBR -Number $number -ErrorAction SilentlyContinue
# Create Partition
# https://technet.microsoft.com/ja-jp/library/hh848714(v=wps.630).aspx
Write-Output "Create Partition"
New-Partition -DiskNumber $number -UseMaximumSize -DriveLetter $usbDriveLetter | Out-Null
# format Volume
# https://technet.microsoft.com/en-us/library/hh848665.aspx
Write-Output "Format Volume"
Format-Volume -DriveLetter $usbDriveLetter -FileSystem FAT32 -NewFileSystemLabel $label -Force | Out-Null
# -------------------------------------------------------------------
# Create USB Installer
# -------------------------------------------------------------------
Start-Sleep -Seconds 5
Write-Output "Start Copy files"
Copy-Item -Path "$($installDriveLetter):\*" -Destination "$($usbDriveLetter):\" -Recurse
Write-Output "Finish Copy files"
# For bootsect.exe there was a thing to fail.
Write-Output "10 seconds Wait..."
Start-Sleep -Seconds 10
# Updates the master boot code
# https://technet.microsoft.com/ja-jp/library/cc749177(v=ws.10).aspx
Write-Output "Updates the master boot code"
cmd.exe /c "$($installDriveLetter):\boot\bootsect.exe /nt60 $($usbDriveLetter):"
# Eject USB Memory
Write-Output "10 seconds Wait..."
Start-Sleep -Second 10
Write-Output "Eject USB Memory."
(New-Object -ComObject Shell.Application).NameSpace(17).ParseName("$($usbDriveLetter):\").InvokeVerb("Eject")
Write-Output "Completed!!!"
}
catch{
Write-Output "Ooops!`nCreate Error!"
}
スポンサーリンク

スポンサーリンク