OSが起動したらVagrantが立ち上がるようにする

メインマシンはWindowsのノートPCなのですが、
OSを起動するとほぼ必ずVagrantを起動させるので、
自動で立ち上げてしまいたい欲求に駆られます。

それだけの話なんですけど、いつもPowershellが未知の世界すぎて挫折してしまいます。。

が! 今回はついにやり切りました。うれしさのあまりブログに書きます。

スクリプトを実行できるようにする

これをやります:ローカルで書いたPowerShellのスクリプトを実行できるようにする。 - Technically, technophobic.

スクリプトを書く

やる動作はこんな感じです

  1. 設定ファイル(vagrant.list)から、起こす対象のVagrantがあるディレクトリのパスとPuttyのセッション名を読み込む
  2. 対象をvagrant upする
  3. puttysshログインする
  4. 2.、3.を対象の数だけ繰り返す。

gist4c05c6759ed78c6ebd7f

つまづいたところがいくつかあったのでメモします。

変数にスクリプトファイルのパスを入れたとき、実行するには&が必要

参考: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 で出る検索窓に「タスク」と打ち込むと、「タスクのスケジュール」というのが現れるのでそれを開きます。

そして、「操作」から「基本タスクの作成」を選びます。

基本タスクの作成

名前とか説明は適当に。

f:id:yutannihilation:20140820014552p:plain

ログイン時に実行することにします。起動時でもいいのかも。

f:id:yutannihilation:20140820014601p:plain

「プログラムの開始」を選びます。

f:id:yutannihilation:20140820014614p:plain

で、ここがちょっとつまづいたポイントでしたが、

↓これだとメモ帳が開くだけです。

f:id:yutannihilation:20140820014623p:plain

スクリプトを実行するには、「プログラム/スクリプト」にはpowershellを指定して、
「引数の追加」にスクリプトファイルのパスを書きます。

f:id:yutannihilation:20140820014628p:plain

これで「完了」を押せば終わりです。

プロパティを変更

ノートパソコンだと、「条件 > 電源」の「コンピュータをAC電源で使用している場合にのみタスクを開始する」のチェックを外した方がよさそうです。これにチェックが入っていると、電源を繋がずに起動したとき、タスクが実行されません。

また、Vagrantなのであまり関係ないと思われますが、ネットワークがつながらない場所でVMを起動してもあまり意味がないので、「次のネットワーク接続が利用可能な場合にのみタスクを開始する」にチェックを入れておいてもいいかもしれません。(あまり根拠があるわけではないです)

f:id:yutannihilation:20140820014633p:plain

以上です。

まとめ

PowerShellは大変。。