logo-sm

お電話はこちら 03-6912-0139

ブログ

PowerShellでGUI表示をする

2020.12.07

新規にアプリをインストールすることが出来ない環境下において、PowerShellはかなり手軽なスクリプト言語です。
PowerShellといえばコマンドプロンプトのようなものをイメージする事がほとんどだと思いますが、
今回はあまり知られていない(かもしれない)GUI表示について紹介したいと思います。

(1).NetFrameworkを用いてWindowsフォームを作成する

まずは画面を作ってみましょう。「Windows PowerShell ISE」を起動して下記の内容を入力しF5を押します。
※「Windows PowerShell ISE」はWindowsのスタートメニュー内の「Windows PowerShell 」にあります。

#アセンブリの読み込み
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

#フォームの設定
$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(800,600)
$Form.Text = "PowerShellでGUI表示をする"

#フォームの表示
$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()

すると、このような画面が表示されたかと思います。

(2)ボタンやテキスト欄を追加してみる

このままでは味気ないので、この画面にもう少し色々なものを足してみましょう。
先ほどのコード内の「フォームの設定」と「フォームの表示」の間に以下のコードを付け足してください。

#ボタンの設定
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Point(100,50)
$Button.Size = New-Object System.Drawing.Size(200,100)
$Button.Text = "ボタン"
$Form.Controls.Add($Button)

#テキストボックスの設定
$TextBox = New-Object System.Windows.Forms.Textbox
$TextBox.Location = New-Object System.Drawing.Point(100,200)
$TextBox.Size = New-Object System.Drawing.Size(400,100)
$TextBox.Text = "サンプル"
$TextBox.Multiline = $True
$Form.Controls.Add($TextBox)

F5で実行すると最初の画面の中にボタンとテキストボックスが現れたと思います。

Locationが表示位置を、Sizeが描画サイズを表しています。
テキストボックスのMultilineは改行を許可するかどうかの設定になります。
ボタンやテキストボックスを準備した後は「$〇〇〇.Controls.Add」で最初に作成したフォームに追加をしないと表示されません。

(3)ボタンの挙動を設定する

せっかくなのでボタンに動きを付けてみましょう。
ひとまず、ボタンを押すとテキストボックスに今日の日付が出る、といった簡単なものを作成してみます。

以下のコードを追加してみてください。

function Btn_Click(){
$TextBox.Text = Get-Date
}

これは(2)で作成したテキストボックスに「Get-Date」で取得した現在の日付を入れる、という内容の関数です。
次にこの関数の呼び出しをボタンに付与しましょう。

$Button.Add_Click({Btn_Click})

これは「ボタンの設定」と「フォームの表示」の間に記載しましょう。
F5で実行してボタンを押してみましょう。テキストボックスの内容が現在の日付で上書きされたと思います。

ちょっとしたツールを作成する際、画面表示された方が分かりやすい場合に手軽に使えるので、機会があればお試しください~

関連記事

  • OpenLayersのWebGLPointsLayerを使ってみる
    ■ はじめに OpenLayers6でWebGL関連の機能の変更がありました。追加された機能の一つに、WebG […]

    2021.04.23

  • VRFルートリークの設定
    VRFは1台の物理装置の中に複数の仮想ルータを作成するような技術ですが、そのままでは仮想ルータ間の通信はできま […]

    2021.04.06

  • SharePoint Server 2019でWebサービス経由でアイテムを取得する
    ルーツ ルーツ。起源。私のエンジニア人生はどこから始まったのだろうか。 気づけばエンジニアになって8年が経って […]

    2020.12.28

  • パートナー

  • 人材育成