SEブログ

【PowerShell】画面内の指定場所にウィンドウを表示する

こんにちは!SE ブログの相馬です。

 

 

 

今回は画面内の指定場所に PowerShell を使ってウィンドウを表示する方法について書いてみました。

 

 

PC を使い、ユーザー向けに何らかの通知を出したい時に、方法としてメールなどいくつかあるかと思います。PowerShell を使って、画面にウィンドウを出す事も可能です。

 

 

そこで、表示する場所など指定できるのか知らなかった為、確認しましたところ、できる事が分かりました。ここでは、明日は「明日は創立記念日です」という内容のウィンドウを、画面右下に表示させてみました。

 

 

完成画面

 

 

 

 

それでは、早速始めてゆきます。

 

 

 

フォームウィンドウ

 

 

まずはフォームの外枠をつくってゆきます。必要なアセンブリを読み込んでから、オブジェクトを生成します。オブジェクトを生成するためには New-Object コマンドレットを使います。@IT の記事で分かり易い説明がありましたのでリンクを貼っておきますね。

 

 

PowerShellスクリプティングの第一歩(後編) (5/5) | @IT

 

 

フォームを作るオブジェクトを作成したら、また New-Object コマンドレットでウィンドウのサイズや表示場所を指定します。

 

# アセンブリの読み込み
[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(400,300)
# フォームの表示場所
$Form.Location = New-Object System.Drawing.Size(1500,700)
# フォームの表示設定
$Form.StartPosition = "manual"
# フォームのテキスト
$Form.Text = "【お知らせ】"
# フォームを表示
$Form.Add_Shown({$Form.Activate()})
# フォームをアクティブ
[void] $Form.ShowDialog()

 

 

 

実行すると、ウィンドウが表示できました。

 

 

 

 

テキストラベル

 

 

入力テキストボックスに表示させるラベルを作成します。

 

# フォントの設定
$Font1 = New-Object System.Drawing.Font("MS Gothic",18)
$Font2 = New-Object System.Drawing.Font("MS Gothic",14,[System.Drawing.FontStyle]::Bold)
$Font3 = New-Object System.Drawing.Font("MS Gothic",14,[System.Drawing.FontStyle]::Bold)

# 【お知らせ】のラベル設定
$Label1 = New-Object System.Windows.Forms.Label
$Label1.AutoSize = $True
$Label1.Location = New-Object System.Drawing.Point(10,10)
$Label1.Text = "【お知らせ】"
$Label1.TextAlign = "TopCenter"
$Label1.Font = $Font1
$Form.Controls.Add($Label1)

# 明日は創立記念日です。の設定
$Label2 = New-Object System.Windows.Forms.Label
$Label2.AutoSize = $True
$Label2.Location = New-Object System.Drawing.Point(10,100)
$Label2.Text = "明日は創立記念日です。"
$Label2.ForeColor = "Red"
$Label2.TextAlign = "TopCenter"
$Label2.Font = $Font2
$Label2.Font.Bold = 
$Form.Controls.Add($Label2)

# ここをクリックしてリンクを開く の設定
$LinkLabel = New-Object System.Windows.Forms.LinkLabel
$LinkLabel.Location = New-Object System.Drawing.Point(10,150)
$LinkLabel.AutoSize = $True
$LinkLabel.Text = "ここをクリックしてリンクを開く"
$LinkLabel.TextAlign = "TopCenter"
$LinkLabel.Font = $Font3
$Form.Controls.Add($LinkLabel)

 

 

 

リンクラベル

 

 

ラベルにリンクを設定します。リンクをクリックしてブラウザを起動するには、New-Object コマンドレットを使い、COM オブジェクトとして InternetExplorer.Application というものを指定すれば OK です。(IE の場合)

 

Windows PowerShell からの Internet Explorer の使用 | Microsoft

 

ここでは、リンクをクリックすると Internet Explorer が起動し、Google のサイトへ移動するようにしました。

 

$Link = {
    $IE = New-Object -ComObject InternetExplorer.Application
    $IE.Navigate("Google.com")
    $IE.Visible = $True
}
$LinkLabel.Add_Click($Link)

 

 

 

コード(完成)

 

全てできあがったら、コードをまとめます。あとはこの 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(400,300)
$Form.Location = New-Object System.Drawing.Size(1500,700)
$Form.StartPosition = "manual"

$Font1 = New-Object System.Drawing.Font("MS Gothic",18)
$Font2 = New-Object System.Drawing.Font("MS Gothic",14,[System.Drawing.FontStyle]::Bold)
$Font3 = New-Object System.Drawing.Font("MS Gothic",14,[System.Drawing.FontStyle]::Bold)

$Label1 = New-Object System.Windows.Forms.Label
$Label1.AutoSize = $True
$Label1.Location = New-Object System.Drawing.Point(10,10)
$Label1.Text = "【お知らせ】"
$Label1.TextAlign = "TopCenter"
$Label1.Font = $Font1
$Form.Controls.Add($Label1)

$Label2 = New-Object System.Windows.Forms.Label
$Label2.AutoSize = $True
$Label2.Location = New-Object System.Drawing.Point(10,100)
$Label2.Text = "明日は創立記念日です。"
$Label2.ForeColor = "Red"
$Label2.TextAlign = "TopCenter"
$Label2.Font = $Font2
$Label2.Font.Bold = 
$Form.Controls.Add($Label2)

$LinkLabel = New-Object System.Windows.Forms.LinkLabel
$LinkLabel.Location = New-Object System.Drawing.Point(10,150)
$LinkLabel.AutoSize = $True
$LinkLabel.Text = "ここをクリックしてリンクを開く"
$LinkLabel.TextAlign = "TopCenter"
$LinkLabel.Font = $Font3
$Form.Controls.Add($LinkLabel)

# リンクラベルのクリックイベント
$Link = {
    $IE = New-Object -ComObject InternetExplorer.Application
    $IE.Navigate("Google.com")
    $IE.Visible = $True
}
$LinkLabel.Add_Click($Link)

$Form.Add_Shown({$Form.Activate()})
[void]$Form.ShowDialog()

 

 

※リンクをブラウザではなく、フォルダにする場合は以下のように Invoke-Item コマンドレットを使います。

 

$Link = {
    Invoke-Item -Path "C:\temp"
}

 

 

 

以上になります。いかがでしょうか。

 

 

アンケートや、何かしらの通知を画面に表示する事ができると、E メールよりもすぐにユーザーに見てもらえるので良いですね。

 

 

では最後までお読みいただきありがとうございました!