Windows PEでバックアップ・リストア(2)

バックアップ・リストアの方式として、PowerShellを用いて操作できるように細工していきます。流れとしては以下のような感じ。

  1. バックアップ
    • バックアップボタンを押す
    • バックアップを取るべきディスクドライブを選択する
    • バックアップを保存するボリュームを選択する
    • バックアップ取得開始
  2. リストア
    • リストアボタンを押す
    • バックアップファイルを選択する
    • リストア対象のドライブを選択する
    • リストア取得開始

バックアップ/リストアそのものは、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")
}

これはメイン画面を表示させるものです。実行すると以下のような画面となります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です