OSが起動したらVagrantが立ち上がるようにする
メインマシンはWindowsのノートPCなのですが、
OSを起動するとほぼ必ずVagrantを起動させるので、
自動で立ち上げてしまいたい欲求に駆られます。
それだけの話なんですけど、いつもPowershellが未知の世界すぎて挫折してしまいます。。
が! 今回はついにやり切りました。うれしさのあまりブログに書きます。
スクリプトを実行できるようにする
これをやります:ローカルで書いたPowerShellのスクリプトを実行できるようにする。 - Technically, technophobic.
スクリプトを書く
やる動作はこんな感じです
- 設定ファイル(vagrant.list)から、起こす対象のVagrantがあるディレクトリのパスとPuttyのセッション名を読み込む
- 対象を
vagrant up
する putty
でsshログインする- 2.、3.を対象の数だけ繰り返す。
つまづいたところがいくつかあったのでメモします。
変数にスクリプトファイルのパスを入れたとき、実行するには&
が必要
参考:Windows PowerShell スクリプトを実行する
これはちょっとUnix系のシェルと違うところです。 文字列はただの文字列として解釈されるので、以下ではだめです。
$vagrant_cmd = "C:\HashiCorp\Vagrant\bin\vagrant.exe" $vagrant_cmd help
実行するには、&
をつける必要があります。
$vagrant_cmd = "C:\HashiCorp\Vagrant\bin\vagrant.exe" & $vagrant_cmd help
Start-Process
に引数を渡すには-ArgumentList
ここで、-ArgumentList
についてのヘルプを調べてみると以下のようになってますが、
String
のリストをどう書けばいいかわからずしばし悩みました。
いろいろ書き方はあるっぽくて結局よく分からないままなんですが、とりあえず("str1","str2"...)
のように書けばいいみたいです。
※Puttyのオプションについては Using PuTTY に書いてあります。-load
は、保存済みのセッションを指定するオプションです。
PS C:\Users\user1> Get-Help Start-Process -Parameter ArgumentList -ArgumentList <String[]> Specifies parameters or parameter values to use when starting the process. The parameter name ("ArgumentList") is optional. 必須 false 位置 2 既定値 None パイプライン入力を許可する false ワイルドカード文字を許可する false
タスクスケジューラに登録する
参考: Windows TIPS:タスクスケジューラの基本的な使い方(Windows 7/8/8.1編) - @IT
まず、タスクスケジューラを開きます。
Windows 8だと、Windows Key + q で出る検索窓に「タスク」と打ち込むと、「タスクのスケジュール」というのが現れるのでそれを開きます。
そして、「操作」から「基本タスクの作成」を選びます。
基本タスクの作成
名前とか説明は適当に。
ログイン時に実行することにします。起動時でもいいのかも。
「プログラムの開始」を選びます。
で、ここがちょっとつまづいたポイントでしたが、
↓これだとメモ帳が開くだけです。
スクリプトを実行するには、「プログラム/スクリプト」にはpowershell
を指定して、
「引数の追加」にスクリプトファイルのパスを書きます。
これで「完了」を押せば終わりです。
プロパティを変更
ノートパソコンだと、「条件 > 電源」の「コンピュータをAC電源で使用している場合にのみタスクを開始する」のチェックを外した方がよさそうです。これにチェックが入っていると、電源を繋がずに起動したとき、タスクが実行されません。
また、Vagrantなのであまり関係ないと思われますが、ネットワークがつながらない場所でVMを起動してもあまり意味がないので、「次のネットワーク接続が利用可能な場合にのみタスクを開始する」にチェックを入れておいてもいいかもしれません。(あまり根拠があるわけではないです)
以上です。
まとめ
PowerShellは大変。。