
TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
詳細情報
| • | |
| • | |
| • |
![]()
Scripting Guy さん、よろしくお願いします。Windows PowerShell スクリプトを [ファイル名を指定して実行] ダイアログ ボックスやショートカットから実行する方法はありますか。[ファイル名を指定して実行] ダイアログ ボックスに「c:\scripts\test.ps1」と入力しても、そのスクリプトがメモ帳で開かれるだけです。
-- RS

なぜ Windows PowerShell スクリプトがメモ帳で開いてしまうのでしょうか。それは、Windows シェルが (残念なことに) Windows PowerShell スクリプトの処理方法を知らないからです。前回 Windows PowerShell をインストールしたとき (アプリケーションはまだベータ版なので、インストール プロセスはそのときから変わっているかもしれません)、スクリプト ファイル (拡張子が .ps1 のファイル) は自動的にメモ帳に関連付けられました。これが、RS さんのスクリプト ファイルがメモ帳で開かれる原因ではないでしょうか。私たちのスクリプト ファイルでも同じ動作になります。これが .ps1 ファイルに対する Windows シェルの動作だからです。
もちろん、こう言われたら .ps1 ファイルを Windows PowerShell 実行可能ファイルに関連付ければすべてうまくいくと考えるでしょう。私たちもそう思いましたが、それではうまくいかないようです。Windows PowerShell スクリプトを [ファイル名を指定して実行] ダイアログ ボックスやショートカット (または、さらに言えば Cmd.exe) から実行するには、Windows PowerShell を明示的に起動し、スクリプト ファイルのパスを起動時パラメータとして渡す必要があります。つまり次のコマンドを実行すると、Windows PowerShell が起動し、スクリプト C:\Scripts\Test.ps1 が実行されます。
powershell.exe c:\scripts\test.ps1
もちろん、ここで読むのを止めて上記のコマンドを試し、このコラムの残りの部分を読まなかったら (残念なことです)、がっかりすると思います。「ちょっと待って、これもうまくいかないじゃないか」と文句を言うでしょう。「一瞬何か点滅しただけで、何も起こらない。Scripting Guys、惜しいけど外れだよ」と。
実は、実行したコマンドはおそらく成功しています。問題は、Windows PowerShell が起動し、スクリプトが実行され、スクリプトが完了したら Windows PowerShell が自動的に終了したということです。この動作が行われていることは、データをテキスト ファイルに保存するスクリプトを実行することで確認できます。上記の方法を使用してスクリプトを起動後、テキスト ファイルが作成されてデータが保存されたかどうかを確認します。テキスト ファイルが作成されてデータが保存されていれば、コマンドは成功しています。つまり、Windows PowerShell が処理を実行し、ローンレンジャーのごとく感謝する間もなく去ってしまったということです。
出力を画面で確認する必要がなければ、これでめでたしめでたしです。上記の動作には、通常すべての処理が人間の目で追うことができない速度で実行されるという点に問題があります (確かに、編集者はその速度でも懸垂分詞を見つけて不定詞を分離させることができると言い張っていますが、私たちが言っているのは "人間" の目で追うことができないということです)。出力を画面で確認する必要がある場合は、スクリプトの実行が完了した後もコマンド ウィンドウを開いたままにするように Windows PowerShell に指示します。この操作は、次のように –noexit パラメータをコマンドに追加することによって実現できます。
powershell.exe –noexit c:\scripts\test.ps1
試してみて結果をご覧ください。実行するときは、–noexit を 1 つ目のパラメータとして指定していることを確認してください。経験上、パラメータの順序を入れ替える (つまり、スクリプト パスの後に –noexit を指定する) とうまくいきません。
何回も言うようですが、"どんな操作を行う場合でも" Scripting Guys が説明した手順に従うことをお勧めします。
そうですね、良い指摘です。1 つ目の動作はすべて私たちに責任があるというわけではありませんが、イルカがもっと賢かったら、もう少し詳しい情報が提供されたはずですね。しかし少なくとも Windows PowerShell コマンドは説明したとおりに入力してください。
これで RS さんの問題が解決するとよいのですが。Windows PowerShell の詳細については、Windows PowerShell センターを参照してください。特に注目すべきなのは、Microsoft の Bruce Payette が執筆した近刊予定の「Windows PowerShell in Action」から引用した新しい情報 (英語) です。また、11 月 6 〜 10 日に公開される 5 部構成の Webcasts シリーズ (特に初心者を対象にしています) Windows PowerShell Week にも引き続き注目してください。近日中に Windows PowerShell Week に関するさらに詳しい情報をお届けします。
一番重要な情報は、来週 Huskies がアリゾナに遠征し、Wildcats と試合することです。Huskies はカンファレンスの 2 勝 0 敗を含め、シーズン序盤を 4 勝 1 敗で乗り切ることができるでしょうか。こう考えてみましょう。Huskies が勝利を収めれば、次回のコラムでそのことに触れるのは確実です。そのコラムにはスクリプトに関連した記述もあるでしょうか。Bart Simpson の不朽の名セリフを借りると、「努力するとは約束できませんが、努力するよう努力するとは約束できますよ」。