PowerShellを調べてみました

はじめまして!大阪支店のabCdeです。
皆さんはPowerShellってご存じですか?
僕は最近知りました。

まず、PowerShellとは何でしょうか?

PowerShell は、.NET 上に構築されたタスクベースのコマンド ライン シェルおよびスクリプト言語です。 PowerShell は、システム管理者およびパワー ユーザーが、オペレーティング システム (Linux、macOS、および Windows) とプロセスを管理するタスクを迅速に自動化するのに役立ちます。

PowerShell スクリプト | Microsoft Docs より引用

なんだか覚えておくと便利そうなので、勉強してみようと思います。

開発にはWindows10ならデフォルトで入っているWindows PowerShell ISEを使います。
まずは、新しい言語の通過儀礼から。

function hi {
    echo "Hello World"
}

hi

無事に Hello World が出力されました。

続いて変数を使ってみます。

function varhi {
    #コメントは先頭に#を付けます。
    #変数は$を付けます
    $var = "Hello World"
    echo $var
}

varhi

こちらも無事に Hello World が出力されました。

せっかくですので、次はコマンドラインではなく通知に何かを出力してみましょう。
Windowsの通知はXMLで内容を作ることが出来るようです。

参考:トースト通知のコンテンツの XML スキーマ

早速PowerShellで使ってみます。

function teast {
    #トースト通知のXMLとして扱える文字列を作成
    $toast = @"
        <toast>
            <visual>
            </visual>
            <actions hint-systemCommands="SnoozeAndDismiss" />
        </toast>
"@
    #変数の型を設定し、XMLとして扱えるように
    $outputxml = New-Object Windows.Data.Xml.Dom.XmlDocument

    #文字列をXMLとして読み込み
    $outputxml.LoadXml($toast)

    #Windowsの通知機能を使用する為のおまじない
    [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe").show($outputxml)
}

teast
実行結果

通知が出てくるようになりました。

今度は通知の中身をいじってみます。

function ramen {

    #変数の型を設定
    $outputxml = New-Object Windows.Data.Xml.Dom.XmlDocument

    #文字列をXML文章として読み込み
    $outputxml.LoadXml($toast)

    #通知機能を使用し、設定したXMLを表示
    [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe").show($outputxml)

    #3分待機
    Start-Sleep 180

    #文字列をXML文章として読み込み
    $outputxml.LoadXml($eat)

    #通知機能を使用し、設定したXMLを表示
    [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe").show($outputxml)
}
    #Toast通知のXMLを作成
    $toast = @"
<toast>
  <visual>
    <binding template="ToastGeneric">
      <text>お湯入れた?</text>
    </binding>
  </visual>
</toast>
"@
    #Toast通知のXMLを作成
    $eat = @"
<toast>
  <visual>
    <binding template="ToastGeneric">
      <text>出来上がり</text>
    </binding>
  </visual>
</toast>
"@

ramen

ついでに3分待つようにして、別の通知も入れました。
これで、お湯を入れて実行すれば、3分後に完成の通知が出てきます。

では、いただきます。