技術とか戦略とか

SIerで証券レガシーシステムを8年いじってからSESに転職した普通の文系SEによる技術ブログ。

WindowsPowerShellでHelloWorld

WindowsPowerShellとは、Windows7以降に標準搭載されているスクリプト言語です。
比較的新しい言語であり、従来のWindowsバッチ(cmd.exe)に慣れていると取っつきにくい面もあるのですが、後発である分高機能であり、実務でも使うことがあります。
 
今回は、WindowsPowerShellの簡単な説明を添えながらHelloWorldを3つ試してみます。
 
----
 
1つ目は、echoコマンドを用いたHelloWorldです。
WindowsPowerShellでは、従来のWindowsバッチやLinuxBashシェルに近い感覚で処理を書くことができます。
他には、変数やif文やパイプといった、お馴染みの書き方が可能です。
ちなみに、少し変わった所では、例外処理をtry-catchやthrowといった書き方で記述することも可能です(こちらはjavaC#に近いです)。
 
なお、WindowsPowerShellは、セキュリティ上の関係で、標準設定では直接実行することができません。
設定を変えずに実行するためには、一時的にポリシーを変更して実行する必要があります。
(今回の例では、Windowsバッチを介して実行します)
 
【サンプルコード】
・Hello.ps1
echo "Hello World!!"
 
・Hello.bat
PowerShell -ExecutionPolicy RemoteSigned .\Hello.ps1
pause
 
【実行結果】
C:\tmp>PowerShell -ExecutionPolicy RemoteSigned .\Hello.ps1
Hello World!!

C:\tmp>pause
続行するには何かキーを押してください . . .
 
----
 
2つ目は、コマンドレットを用いたHelloWorldです。
コマンドレットは、「動詞-名詞(-パラメータ名 パラメータ値)」という規則で命令を記述します。
 
今回は、"Write-Host"を使用します。
"Write"は文字列の書き込み、"Host"はコンソールを意味します。
(なお、WindowsPowerShellでは、コンソールへの出力とストリーム(パイプ)への出力は別々に制御します。ストリームに出力したい場合は、"Host"の代わりに"Output"を指定します。)
 
【サンプルコード】
・Hello.ps1
Write-Host "Hello World!!"
 
※Hello.batは変更無し
 
【実行結果】
C:\tmp>PowerShell -ExecutionPolicy RemoteSigned .\Hello.ps1
Hello World!!

C:\tmp>pause
続行するには何かキーを押してください . . .
 
----
 
3つ目は、.NetFrameworkの機能を使用したHelloWorldです。
WindowsPowerShellでは、.NetFrameworkの機能を使用することもできます。
例えば、"Hello World!!"と書かれたポップアップを表示することができます。
 
今回の例では、コマンドレットでWindowsFormを取り込み、MessageBoxクラスのShowメソッドを使用してポップアップを表示します。
記述方法はサンプルコードの通りですが、クラス名とメソッド名の記述方法はC++に似ています。
 
【サンプルコード】
・Hello.ps1
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("Hello World!!", "ポップアップ")
 
※Hello.batは変更無し
 
【実行結果】

f:id:akira2kun:20201028233117j:plain