[PowerShell] | |||||||||||
PowerShellで進ちょく状況をプログレス・バーで表示する
|
|||||||||||
|
解説 |
PowerShellで処理時間の長いスクリプトを実行する場合、何も表示せずに、ただユーザーを待たせるのは不親切だ。ユーザーは処理が実際に行われているのか不安に思うだろうし、短気なユーザーであれば、数秒間何も動作しない(ように見える)スクリプトは、クラッシュしていると思い込んで強制的に終了しようとするかもしれない。
そこで、処理が数秒以上に及ぶようなスクリプトを実行する場合は、プログレス・バー(進ちょくバー)を表示するようにしておくのがよいだろう。これによって、エンドユーザーはスクリプトがクラッシュしておらず、確かに継続して実行されていることを確認できるし、処理が現時点で何割程度完了しているのか(あとどの程度の時間がかかりそうなのか)を把握することができる。
PowerShellではこのようなプログレス・バーを生成するために、Write-Progressという専用コマンドレットを用意している。これを利用すれば、最低限のパラメータ指定だけで視覚的なプログレス・バーをスクリプトに組み込むことができる。
それではさっそく、具体的なサンプル・コードを見ていくことにしよう。ここでは、別TIPS「PowerShellでテンプレートを使ってメールを一斉配信する」で紹介したMailTransfer.ps1スクリプトに対して、メールの送信状況を表すプログレス・バーを追加してみよう。
操作方法 |
*注意 |
PowerShellを利用するには、あらかじめシステムにユーザー自身がインストールしておく必要があります。具体的なインストール方法については「PowerShellをインストールする」を参照してください。 |
手順1――テキスト・エディタでPowerShellのコードを入力する
まずはテキスト・エディタ(メモ帳でも何でもよい)を開き、以下のコードを入力してほしい。なお「#」で始まる行は、コードの意味を解説するためのコメント部分なので、省略してもよい。コメントには、スクリプトの簡単な説明を入れておいた。
なお、本稿ではプログレス・バーにかかわる部分(リスト内の太字部分)のみを解説する。メール送信のロジックそのものについては、先のTIPS記事の解説を参照していただきたい。
|
|
※ サンプル・ファイルProgress.ps1およびサンプル・データ・ファイルをダウンロードするには、ここをクリックしてください。 |
PowerShellスクリプトの実行ファイルは拡張子を「.ps1」とする必要がある。ファイル名自体は何でも構わないが、ここでは「Progress.ps1」という名前で保存しておこう。
コード全体の流れについてはリスト内のコメントをご覧いただくとして、ここで注目してほしいのは次の2点だ。
1.プログレス・バーを表示するのはWrite-Progressコマンドレット
冒頭で述べたように、PowerShell上でプログレス・バーを表示するのは、Write-Progressコマンドレットの役割だ。プログレス・バーを表示するために最低限必要な構文は次のとおりである(利用可能な全パラメータについては、PowerShellのヘルプを参照していただきたい)。
Write-Progress [-activity] 動作状況を表す文字列 [-status] 現在の状態を表す文字列 [-percentComplete 進ちょくパーセンテージ] [-secondsRemaining 残り時間] |
-activity/-statusパラメータは、それぞれプログレス・バーの先頭行と2行目に表示する文字列である。ここでは、-statusプロパティに進ちょく状況に応じてパーセンテージ表示用の文字列をセットしている。また、サンプルのリストではこれらパラメータ名は省略しているが、もちろん、構文のように明示的に「-activity」「-status」と指定してもよい。
-percentCompleteパラメータはプログレス・バーの進ちょく割合を示すためのパラメータである。リストではこちらのパラメータを使用しているが、処理の残り時間を表したい場合には-secondRemainingパラメータを指定することもできる。
2.処理を休止するのはStart-Sleepコマンドレット
プログレス・バーの表示には直接関係はないが、本サンプルでは進ちょく状況の変化について確認しやすいように、スクリプト内にダミーの休止処理を挟んでいる。実際のスクリプトでは(もちろん)この処理はカットすべきであるが、その場合、処理が一瞬で終わってしまい、プログレス・バーが表示されない可能性もあるので、注意すること。
PowerShellで処理を一時的に休止するのは、Start-Sleepコマンドレットの役割である。Start-Sleepコマンドレットの基本的な構文は次のとおりだ(利用可能な全パラメータについては、PowerShellのヘルプを参照していただきたい)。
Start-Sleep {[-seconds] 休止する秒数|-milliseconds 休止するミリ秒数} |
処理を休止する時間は、-secondsパラメータか-millisecondsパラメータのいずれかで指定できる。-secondsパラメータはパラメータ名を省略可能であるが、-millisecondsパラメータはパラメータ名まで明示する必要があるので、注意すること。
手順2――PowerShellのスクリプト・コードを実行する
Progress.ps1を実行するには、PowerShellのプロンプトを開いたうえで、以下のようにコマンドを実行すればよい(カレント・フォルダにスクリプトが保存されているものとする*)。
PS > ./Progress.ps1 |
* PowerShellでスクリプト・ファイルを実行する場合には、あらかじめいくつかの設定を行っておく必要がある。詳細については、「Windows PowerShellコマンド&スクリプティング入門(後編)」を参照していただきたい。 |
その際、先のTIPS記事で紹介したmail.datがProgress.ps1と同一のフォルダ中に存在しない場合や、指定したSMTPサーバやデータベース・ファイルへのパスなどが間違っている場合などには、スクリプトが正しく動作しない可能性があるので、注意すること。Progress.ps1を実行して、次のようなプログレス・バーが表示されれば成功である。
![]() |
|||||||||
プログレス・バーの使用例 | |||||||||
スクリプト実行時に、処理進行に従ってプログレス・バーが表示され、進ちょく状況や残り時間などを把握しやすくなる。 | |||||||||
|
この記事と関連性の高い別の記事
- PowerShellでレジストリ情報を操作する(TIPS)
- PowerShellスクリプトへのショートカットを作成する(TIPS)
- PowerShellでテンプレートを使ってメールを一斉配信する(TIPS)
- グループ・ポリシーを使って、コンピュータの終了時にコマンドを実行する(TIPS)
- PowerShellからVBScript/JScriptのコードを利用する(TIPS)
このリストは、デジタルアドバンテージが開発した自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。

![]() |
「Windows TIPS」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
![]() |
|
|
|
![]() |