treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

(2/2)bcdeditでデュアルブート環境の操作

昨日の続きです。⇒(1/2)bcdeditコマンドはデュアルブートで役に立つ

昨日までのbcdeditコマンドを踏まえまして、デュアルブート環境のPCをリモートデスクトップで利用する場合のちょっとしたTIPSをご報告します。

リモートデスクトップで使っている場合

リモートデスクトップでデュアルブート環境のPCを使っていると、起動時のOSは
デフォルト起動に固定されて
しまいます。
つまり、昨日の「bcdedit /default」であらかじめ指定したOSが再起動時に自動起動されてしまうので、せっかくリモートデスクトップで操作しているのに、OSを切り替えるためだけに、いちいちPCの目の前に行ってOSの選択だけやらなきゃいけない、という状況になります。

これはあまりうまくない。

そんな時のために用意しておくと役に立つバッチファイル(というかコマンド)をOSに用意しておきましょう。

シチュエーション

昨日の前提条件を引き続き。

  • Windows 7側GUID:{8a673ba0-e6e5-11e3-92bf-966405542046}
  • Windows8.1側GUID:{8a673b9c-e6e5-11e3-92bf-966405542046}

Windows 7は「8a673ba0~」で始まるGUID、Windows8.1は「8a673b9c~」で始まるGUIDで動作しています。
で、Windows7がデフォルト起動と設定しているという前提で、リモートデスクトップでWindows 7を使っている状況だとします。
このとき、
「Windows8.1使いたいなぁ…。」
と思った時、です。

用意するバッチファイル

このとき用意するバッチファイルは以下のようになります。
----------------------------------------------
@echo off
rem Windows 8.1 Boot Info
bcdedit /bootsequence {8a673b9c-e6e5-11e3-92bf-966405542046}
C:\Windows\System32\shutdown.exe -r -t 0
----------------------------------------------
bcdeditコマンドに「/bootsequence」というオプションを付けて、続けてWindows8.1側のGUIDを指定します。コマンドがセットされた直後にすぐシャットダウンコマンドを実行してPCをリブートしています。

このバッチファイルを用意しておけば、ダブルクリックするだけで

 次回は「8a673b9c~」で始まるOSから起動してね

とOSに教え込んだ状態で再起動が動作するので8a673b9c~のOSであるWindows8.1が一回だけ起動してきます。※次回の再起動は再びWindowsブートマネージャーの選択画面が表示されデフォルトOSから起動します。

後はこのバッチファイルを適当な場所に保管して、ショートカットでもデスクトップに作っておけば、リモートデスクトップでデュアルブートのサブOSをダブルクリックで起動することができるようになる、ということです。
図:バッチファイルをショートカットで配置

f:id:treedown:20161207115421p:plain

実際サブOS側のWindows8.1側は通常の再起動をすれば次の起動はWindows7が起動してくることになりますが、どうせならWindows8.1側にもWindows7を明示的に起動するバッチファイルを用意してしまいます。

このとき用意するバッチファイルは以下のようになります。
----------------------------------------------
@echo off
rem Windows7 Boot Info
bcdedit /bootsequence {8a673ba0-e6e5-11e3-92bf-966405542046}
C:\Windows\System32\shutdown.exe -r -t 0
----------------------------------------------
「bcdedit /bootsequence」にWindows7側のGUID「8a673ba0~」を指定します。
同じようにすぐ再起動コマンドを実行しています。
後は同じようにこれもバッチファイル化して、

f:id:treedown:20161207115458p:plain

デスクトップにショートカットを作成してしまいます。

ここまでやると

ここまでやっておくと、リモートデスクトップで、

  • Windows7操作中にダブルクリックでWindows8.1を指定してリブート
  • Windows8.1操作中にダブルクリックでWindows7を指定してリブート

ができるようになります。本来はPCの目の前に行ってWindowsブートマネージャー画面で起動するOSを選択するよう操作しなければデュアルブート環境では望みのOSを起動できませんが、リモートから起動したいOSを選択してデュアルブート環境のPCをリモート操作することができるようになりました。

ちょっと今更ですが、これはどういう時に使うのかといいますと、IntelAMTやWake on LANといったネットワーク経由で電源ONするPCがデュアルブート環境だった場合に使っています。電源ONがネットワーク経由なのでデュアルブート環境のPCでもどのOSを起動するかだってネットワーク経由で操作したい、と思った時の選択肢がこれ、というところです。
なので、

  1. WoLかIntelAMTでPCの電源をONする
  2. デフォルト起動のOSが起動する
  3. バッチファイル「bcdedit /bootsequence ~」で起動したいOSを指定して再起動

というステップを経ることで、完全リモート操作でデュアルブート環境を扱うことができるようになった、めでたしめでたし、という感じです。

あと、かなり今更な感じですが、bcdeditコマンドによってブート情報を設定変更するまえに、自分の指定するGUIDが間違っていないか、これを確実に確認するために「bcdedit /bootsequence」コマンドの実行で自分が想定するOSがきっちり起動するか確認しておいたほうがいいかもしれませんね。「bcdedit /bootsequence」なら一回だけの実行なのでもしGUIDの入力をミスしたとしても取り返しがつきますから。