Hyper-Vの仮想マシンをバックアップ(エクスポート)するPowerShellスクリプトをご紹介します。
また、タスクスケジューラで自動的にバックアップさせる方法もご紹介します。
仮想マシンをエクスポートするスクリプト
仮想マシンをエクスポートするPowerShellスクリプトがこちらです。
# エクスポートする仮想マシンの名前
$vmName = "仮想マシンの名前"
# エクスポート先の親フォルダパス
$exportParentPath = "バックアップ先のディレクトリ"
# 日付を取得してフォルダ名を作成
$dateSuffix = Get-Date -Format "yyyyMMdd"
$folderName = $vmName+"_"+$dateSuffix
# エクスポート先のフォルダパス
$exportPath = Join-Path -Path $exportParentPath -ChildPath $folderName
$exportPath
# Hyper-V モジュールのインポート
Import-Module Hyper-V
# フォルダが存在しない場合は作成
if (-not (Test-Path $exportPath -PathType Container)) {
New-Item -Path $exportPath -ItemType Directory
}
# エクスポートコマンドの実行
Export-VM -Name $vmName -Path $exportPath
動作としては次のようになります。
- 指定したディレクトリに「仮想マシン名_日付」という名前のディレクトリを作成する
- 作成したディレクトリに仮想マシンのエクスポートを行う
エクスポートが終わると自動的に終了します。
タスクスケジューラで自動実行させる
タスクスケジューラで新しいタスクを作成し、「操作」タブからタスクを追加します。
- 操作:プログラムの開始
- プログラム:powershell.exe
- 引数の追加:
-Command "スクリプトのパス"
OKをクリックして登録すればOKです。
補足
基本的にデフォルトで大丈夫ですが、処理に時間がかかりすぎると強制終了されることがあります。
タイムアウトなど適宜調整してください。
古いバックアップを自動で削除するには?
古いバックアップファイルを削除するには、以下のスクリプトを追加します。
指定したディレクトリ内を検索し、更新日時が最も古いフォルダを削除します。
# 操作対象のディレクトリを指定
$targetDirectory = "バックアップ先のディレクトリ"
# ディレクトリ内のサブディレクトリを取得し、最も古いものを選択
$oldestDirectory = Get-ChildItem -Path $targetDirectory -Directory | Sort-Object LastWriteTime | Select-Object -First 1
if ($oldestDirectory -ne $null) {
# 最も古いディレクトリを削除
Remove-Item -Path $oldestDirectory.FullName -Recurse -Force
Write-Host "最も古いディレクトリを削除しました: $($oldestDirectory.FullName)"
} else {
Write-Host "ディレクトリが見つかりませんでした。"
}
バックアップするスクリプトの最後に追加するのが良いと思います。
バックアップ(VMのエクスポート)が何らかの原因で行われなかった場合、削除前にスクリプトが終了されるため、「気がついたらバックアップが消えていた」なんて事態を防ぐことができます。
コメント