目次
ディストリビューション
wsl --install
は指定しなければUbuntuがインストールされます。
当方はAlmaLinux-8をインストールしていますので他ディストリビューションでは動作確認していません。
AlmaLinux-8のインストールは、Microsoft Storeから
基本コマンド
Power Shell
PS C:\> wsl --export WSLDISTRIBUTION BACKUPNAME.tar
Power Shell スクリプト(Export)
# エクスポートするインスタンス
$wslInstanceName = Read-Host "対象インスタンス名を入力してください (例: Ubuntu)"
# 現在の日時を取得(yyyymmddHHmmss形式)
$currentDateTime = Get-Date -Format "yyyyMMddHHmmss"
# エクスポートファイルを保存するディレクトリ
$exportDirectory = "${wslInstanceName}"
# ディレクトリが存在しない場合は作成
if (-Not (Test-Path $exportDirectory)) {
New-Item -ItemType Directory -Path $exportDirectory
}
# WSLインスタンスをエクスポート(指定ディレクトリに保存)
$tarFileName = "${exportDirectory}\${wslInstanceName}-${currentDateTime}.tar"
wsl --export $wslInstanceName $tarFileName
# .tarファイルを.zip形式で圧縮
Compress-Archive -Path $tarFileName -DestinationPath "${tarFileName}.zip"
# 圧縮後、元の.tarファイルを削除(オプション)
Remove-Item -Path $tarFileName
# ユーザーに更新内容を入力させる
$updateContent = Read-Host "更新内容を入力してください"
# 現在のreleasenote.txtの内容を一時的に保存
if (Test-Path "releasenote.txt") {
$currentContent = Get-Content -Path "releasenote.txt"
}
# 新しい行をreleasenote.txtの先頭に追加
$newContent = "${currentDateTime}:${wslInstanceName}: $updateContent"
Set-Content -Path "releasenote.txt" -Value $newContent
# 以前の内容を新しい行の後に追加
if ($currentContent) {
Add-Content -Path "releasenote.txt" -Value $currentContent
}
Power Shell スクリプト(Import)
# Zipファイル名とWSLのインスタンス名、インストール先のパスを指定
$zipFileName = Read-Host "解凍するZipファイル名を入力してください (例: myBackup20210916.tar.zip)"
$wslInstanceName = Read-Host "新しいWSLインスタンスの名前を入力してください (例: NewLinux)"
$installLocation = Read-Host "WSLインスタンスを保存するディレクトリを入力してください (例: C:\WSL\Instances)"
# もしユーザーが ~ で始めた場合は、それをフルパスに変換
if ($installLocation.StartsWith("~")) {
$installLocation = $installLocation.Replace("~", $env:USERPROFILE)
}
# ディレクトリが存在しない場合は作成
if (-Not (Test-Path $installLocation)) {
New-Item -ItemType Directory -Path $installLocation
}
# Zipファイルが存在するか確認
if (-Not (Test-Path $zipFileName)) {
Write-Host "指定されたZipファイルが見つかりません。"
Exit
}
# Zipファイルを解凍
$tarFileName = [io.path]::GetFileNameWithoutExtension($zipFileName)
Expand-Archive -Path $zipFileName -DestinationPath . -Force
# WSLインスタンスをインポート
wsl --import $wslInstanceName $installLocation $tarFileName
# オプション: 解凍した.tarファイルを削除
Remove-Item -Path $tarFileName
記事掲載経緯
Docker環境が面倒になった
Docker命みたいなところあったけどWSLとVSCodeあれば事足りると気付きました。
パッケージやらインストールしなきゃいけないのはどっちもじゃん
コメント