Windows PEでバックアップ・リストア(2)
バックアップ・リストアの方式として、PowerShellを用いて操作できるように細工していきます。流れとしては以下のような感じ。
- バックアップ
- バックアップボタンを押す
- バックアップを取るべきディスクドライブを選択する
- バックアップを保存するボリュームを選択する
- バックアップ取得開始
- リストア
- リストアボタンを押す
- バックアップファイルを選択する
- リストア対象のドライブを選択する
- リストア取得開始
バックアップ/リストアそのものは、Windows標準のdismを使用して行うこととします。詳しくは以下のリンクを参照ください。
WindowsにはPowerShellのISEが初めからインストールされているのでそれを使って書いていきます。GUI表示がPEの制約によって?うまく表示できず、工夫に工夫を重ねております。一部AIの力を借りました。
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# ============================================================
# Main Form
# ============================================================
$form = New-Object System.Windows.Forms.Form
$form.Text = "FFU Backup / Restore Tool"
$form.Size = New-Object System.Drawing.Size(520,380)
$form.StartPosition = "CenterScreen"
# Path Label
$label = New-Object System.Windows.Forms.Label
$label.Text = "Path:"
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(50,20)
$form.Controls.Add($label)
# Path TextBox
$PathBox = New-Object System.Windows.Forms.TextBox
$PathBox.Location = New-Object System.Drawing.Point(60,18)
$PathBox.Size = New-Object System.Drawing.Size(320,20)
$form.Controls.Add($PathBox)
# Browse Button
$BrowseBtn = New-Object System.Windows.Forms.Button
$BrowseBtn.Text = "Browse"
$BrowseBtn.Location = New-Object System.Drawing.Point(390,16)
$BrowseBtn.Size = New-Object System.Drawing.Size(80,25)
$form.Controls.Add($BrowseBtn)
# Backup Button
$BackupBtn = New-Object System.Windows.Forms.Button
$BackupBtn.Text = "Backup FFU"
$BackupBtn.Location = New-Object System.Drawing.Point(10,60)
$BackupBtn.Size = New-Object System.Drawing.Size(460,40)
$form.Controls.Add($BackupBtn)
# Restore Button
$RestoreBtn = New-Object System.Windows.Forms.Button
$RestoreBtn.Text = "Restore FFU"
$RestoreBtn.Location = New-Object System.Drawing.Point(10,110)
$RestoreBtn.Size = New-Object System.Drawing.Size(460,40)
$form.Controls.Add($RestoreBtn)
# Log Box
$LogBox = New-Object System.Windows.Forms.TextBox
$LogBox.Multiline = $true
$LogBox.ScrollBars = "Vertical"
$LogBox.Location = New-Object System.Drawing.Point(10,160)
$LogBox.Size = New-Object System.Drawing.Size(460,130)
$form.Controls.Add($LogBox)
# Progress Bar
$Progress = New-Object System.Windows.Forms.ProgressBar
$Progress.Location = New-Object System.Drawing.Point(10,300)
$Progress.Size = New-Object System.Drawing.Size(460,20)
$form.Controls.Add($Progress)
# Logging
function Log($msg){
$LogBox.AppendText("$msg`r`n")
}これはメイン画面を表示させるものです。実行すると以下のような画面となります。



