PowerShellスクリプトを非表示で実行する方法はいくつかありますが、特に便利なのはVBScriptを使用する方法です。
この記事では、PowerShellスクリプトを非表示で実行するための具体的な手順や、他の方法について詳しく解説します。
PowerShellスクリプトを非表示で実行する理由
PowerShellスクリプトを非表示で実行することには、いくつかの利点があります。
例えば、ユーザーに実行中のプロセスを見せたくない場合や、バックグラウンドで自動化されたタスクを実行したい場合に非常に便利です。
これにより、作業がスムーズに進むだけでなく、ユーザーの注意を引かずに処理を行うことができます。
特に、企業や組織での業務自動化においては、ユーザーインターフェースを表示せずにスクリプトを実行することが求められることが多いです。
これは「黒い画面で何やら処理が勝手に動いている!?」、「ウィルスでは!?」などユーザーへの不安を煽ったりする可能性や、
その処理内容を見られると、パソコンに詳しいユーザーの場合、悪用されかねない、
スクリプト実行中に×ボタンで閉じられてしまう、といったことや、
「情シスがまた勝手に設定変更している!!」といった苦情がくることも考えられます(笑)
以上のことからバックグラウンドで非表示で実行することは、
業務の効率化が図れ、エラーの発生を最小限に抑えることができます。
VBScriptを使用した非表示実行
PowerShellスクリプトを非表示で実行する最も一般的な方法は、VBScriptを使用することです。
以下に、VBScriptを作成する手順を説明します。
VBScriptの作成
まず、PowerShellスクリプトを非表示で実行するためのVBScriptを作成します。
以下のコードをテキストエディタにコピーして、run_script.vbsという名前で保存します。
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "powershell.exe -ExecutionPolicy Bypass -File ""C:\path\to\your_script.ps1""", 0, True
このスクリプトでは、WshShell.Run
メソッドの第二引数に0を指定することで、ウィンドウを非表示にしています。C:\path\to\your_script.ps1
の部分は、実際のスクリプトのパスに置き換えてください。
VBScriptの実行
作成したVBScriptファイルをダブルクリックすると、指定したPowerShellスクリプトが非表示で実行されます。
この方法は非常に簡単で、特別な設定は必要ありません。
実行後は、スクリプトが正常に動作しているかどうかを確認するために、スクリプト内にログを記録する機能を追加することもおすすめです。
バッチファイル経由での実行
もう一つの方法として、バッチファイルを使用する方法があります。
バッチファイルを使うことで、PowerShellスクリプトを非表示で実行することができます。
バッチファイルの作成
以下の内容をテキストエディタにコピーして、run_script.batという名前で保存します。
@echo off
powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File "C:\path\to\your_script.ps1"
このバッチファイルを実行すると、PowerShellスクリプトが非表示で実行されます。
バッチファイルは、複数のコマンドを一度に実行するための便利なツールですので、他のコマンドと組み合わせて使用することも可能です。
この方法ではバッチファイルの呼び出し方によってはコマンドウィンドウが表示されてしまいます。
短い処理なら一瞬ですが長時間になると、ちょっと使えません。
その場合は次の方法を使います。
VBScriptからバッチファイルを呼び出す
さらに、VBScriptからこのバッチファイルを呼び出すこともできます。
以下のコードを新しいVBScriptファイルに追加して、call_batch.vbsという名前で保存します。
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "C:\path\to\run_script.bat", 0, True
この方法でも、ウィンドウは表示されずにスクリプトが実行されます。
バッチファイルを使用することで、より複雑な処理を簡単に管理できるようになります。
タスクスケジューラの利用
Windowsのタスクスケジューラを利用する方法もあります。
タスクスケジューラを使うことで、特定の時間や条件でPowerShellスクリプトを非表示で実行することができます。
タスクスケジューラの設定
- タスクスケジューラを開く: スタートメニューから「タスクスケジューラ」を検索して開きます。
- 新しいタスクを作成: 「基本タスクの作成」を選択し、タスクの名前や説明を入力します。
- トリガーの設定: スクリプトを実行する条件(時間やイベントなど)を設定します。
- アクションの設定: 「プログラムの開始」を選択し、
powershell.exe
を指定します。引数には-ExecutionPolicy Bypass -File "C:\path\to\your_script.ps1"
を入力します。 - 完了: 設定が完了したら、タスクを保存します。
この方法を使うと、指定した条件で自動的にPowerShellスクリプトを非表示で実行することができます。
タスクスケジューラを利用することで、定期的なメンテナンスやバックアップ作業を自動化することができ、業務の効率化に大いに役立ちます。
conhost.exeを使った方法
conhost.exeは、Windowsのコンソールホストプロセスで、コマンドプロンプトやPowerShellのウィンドウを管理する役割を持っています。
このプロセスを利用することで、コマンドラインアプリケーションをより効率的に実行することができます。
特に、--headless
オプションを使用することで、ウィンドウを表示せずにスクリプトを実行することが可能になります。
conhost.exe --headless powershell -file "C:\path\to\sample.ps1"
※conhost.exeの引数 “--headless
“は将来的に使えなくなる可能性があります。マイクロソフトサイトではドキュメント化もされていません。
まとめ
PowerShellスクリプトを非表示で実行する方法はいくつかありますが、VBScriptやバッチファイルを使用する方法が特に便利です。
また、タスクスケジューラを利用することで、より柔軟にスクリプトを実行することも可能です。
これらの方法を活用して、効率的に作業を進めてみてください。
自動化は、時間を節約し、エラーを減らすための強力な手段です。
ぜひ、これらのテクニックを試して、あなたの作業をよりスムーズに進めてください。
コメント