🦍

WSL2とBluestacksを両立できないので、Powershellスクリプトを書いてみた

2023/09/27に公開

私は仕事でMac、Ubuntuを使っているため、LinuxのCLIに多少慣れています。
そのため、型落ちの自作PCに同様の開発仮想環境を用意しようと考えました。
しかし、調べた限りでWSL2とBluestacksの両立は自分の環境では難しく(Homeエディション)、それを解決するためのスクリプトを書くことにしました。
Powershellに触ること自体はじめてです。
デフォルトのCLIが動作とか配色とか諸々つらい

PowerShellスクリプトの作成

まず、Windows OSで特定のWindows機能をオン・オフするためのPowerShellスクリプトを作成しました。
このスクリプトは、Hyper-V Platformと仮想マシンプラットフォームの2つの機能をオン・オフすることができます。
OnでBluestacks、Offでwslが起動可能です。
いちいち再起動しないといけないのが面倒すぎる...

virtualEnabled.ps1
# 管理者権限で実行する必要があります

# オプションを選択
$option = Read-Host "Hyper-Vと仮想マシンプラットフォームをオンにするには 'on'、オフにするには 'off' と入力してください"

switch ($option) {
    'on' {
        # Hyper-V Platformをオンにする
        Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

        # 仮想マシンプラットフォームをオンにする
        Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
    }
    'off' {
        # Hyper-V Platformをオフにする
        Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

        # 仮想マシンプラットフォームをオフにする
        Disable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
    }
    default {
        Write-Host "無効なオプションが選択されました。'on' または 'off' を入力してください。"
        exit
    }
}

# 再起動
Restart-Computer

バッチファイルの作成

今回の機会で初めて知ったのですが、Powershellスクリプトはシェルスクリプトのようにパスだけでは実行できないです。
スクリプトを設置したディレクトリにバッチファイルも設置し、バッチ経由で管理者権限で起動する必要があります。

runASAdmin.bat
@echo off
set /p "psScriptPath=PowerShellスクリプトのフルパスを入力してください: "
powershell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%psScriptPath%""' -Verb RunAs}"

文字化け

Macと同じ感覚でついUTF-8でエンコードしていましたが、WindowsはShift-JISでないとコンソール上の日本語出力が文字化けします。
これは、エンコーディングの問題やコンソールのフォント設定に起因するので以下の方法で問題を解決しました。

  • スクリプトとバッチファイルをShift-JISでエンコードして保存
  • コンソールのフォントを「MS ゴシック」に変更
  • バッチファイルの最初にchcp 932を追加して、コマンドプロンプトのコードページをShift-JISに設定

まとめ

WSL2とBluestacksの両立は手動で機能のオンオフ切り替えして今まで対応していたのですが、Windowsの機能をオン・オフするスクリプトを書いたことで手間の削減ができました。

Discussion