2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« PowerShellで、列挙子(Enumerator)を配列(Array)に戻す。 | トップページ | PowerShellの.PS1ファイルをバッチファイル化する。(その2) »

2007年8月20日 (月)

PowerShellの.PS1ファイルをバッチファイル化する。(その1)

PowerShellの.PS1ファイルをそのまま他人に渡しても、それを実行するには、いろいろと設定が必要で、困ります。
そんなときは、.PS1ファイルをバッチファイルにラップするとよいでしょう。
これなら、ExecutionPolicyがRestrictedのままでも、実行できます。

.PS1ファイルの先頭に1行、末尾に空行を加えて、拡張子を.CMDに変えます。

@MORE +1 %0 | powershell.exe -command - & GOTO:EOF
if(1){
  write-output hoge
}
(空行)

この例で、もし、空行がないと、write-output hogeが実行されません。

標準入力からのコマンドの読み込み/解釈/実行の単位は、「単行モード」と「継続行モード」の二つがあります。
一行読んで、もし、一行で完結してないときは、「継続行モード」に切り替わり、それが空行まで続きます。

大概は、空行の追加でうまく行きますが、以下のような、一見、一行で完結してそうな紛らわしい記述があると駄目です。:-(
if(){~}
else{~}

« PowerShellで、列挙子(Enumerator)を配列(Array)に戻す。 | トップページ | PowerShellの.PS1ファイルをバッチファイル化する。(その2) »