PowerShellでHello World

[インフラ勉強会 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/infra-workshop) :star2: 6日目の記事です！

## 自己紹介

aochan と申します。
非IT企業のヘルプデスク ＆ Windows クライアントPCの雛形作成・管理をしています。転職した日に客先に一人放り込まれ、未経験で技術的なことを学ぶ機会がない（引継ぎ資料もない！）現場に配属され絶望していたところをインフラ勉強会に救われた人です。

### インフラ勉強会はいいぞ（宣伝）
オフラインイベントで「PowerShellワカラナイからセッションやってほしい」と言ったら、激強エンジニアさんがすぐにオンラインのインフラ勉強会でセッションしてくださいました。
初心者に優しいインフラ勉強会。非営利のコミュニティなのにこのスピード感と技術力。感謝しかありません。
ヘルプデスクなので、あまり専門性は必要とされない職種なのですが、ただ楽しくて参加してるふしがあります。インフラエンジニアでなくてもとても勉強になるコミュニティです。

##本題：PowerShell で ”Hello World” を表示させよう
インフラ勉強会の「PowerShellことはじめ」セッションで学んだ内容のアウトプットです。

###使用環境
Windows 10 Pro ver.1809
PowerShell ver.5.1.17763.134                                                                 

###まずは PowerShellのエディタを起動
PowerShellの開発環境はWindowsに標準装備されています。自分で構築する必要がないので楽チンです。
「Windows PowerShell ISE」を起動します。64bit版OSだと、32bit版と64bit版の両方がインストールされているので、何もなければ64bit版を起動します。
![PS01.png](https://qiita-image-store.s3.amazonaws.com/0/143735/c71372f2-7c0e-31ed-8b2e-f7b8222bef3a.png)

### メッセージボックスで”Hello World”
たった2行です。簡単すぎてすみません。

```powershell:helloWorld

Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("Hello World!!", "ハロー")
```
![PS02.png](https://qiita-image-store.s3.amazonaws.com/0/143735/5ab18d2e-b578-c042-1e28-a1e1f9ab32a5.png)

### 1行目：Add-Type -Assembly
PowerShellでは.NET Frameworkのライブラリを使用することができますが、数が膨大なので読み込まないと使えない機能があります。ここではWindowsのメッセージボックスを使うために、.NETアセンブリをメモリに読み込む処理を行います。

### 2行目：[System.Windows.Forms.MessageBox]::Show

MessageBoxクラスは **静的クラス** なので、以下のように記述します。

```powershell
# [クラス名]::メソッド名
```

参考：[静的なクラスとメソッドの使用](https://forsenergy.com/ja-jp/windowspowershellhelp/html/418ad766-afa6-4b8c-9a44-471889af7fd9.htm)

###Showメソッドのパラメーター

Show(text, title, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton)

| パラメーター      |値                |
|:-----------------|:------------------|
| text             | 文字列 |
| title            | 文字列 |
| MessageBoxButtons         | OK, OKCancel など *1 |
| MessageBoxIcon            | Information, Warning など *1 |
| MessageBoxDefaultButton   | Button1, Button2 など *1 |

*1：省略可

###ダブルクリックで実行できるように、ファイルに保存

コマンドを白いエディタの部分に書いて保存します（拡張子は.ps1）。 
![PS03.png](https://qiita-image-store.s3.amazonaws.com/0/143735/c4aa021b-9155-4d48-3625-fde93b5a8257.png)

ダブルクリックすると…あれ？スクリプトなのにメモ帳が開く？？

###PowerShellの実行ポリシー
PowerShellはデフォルトだと全てのスクリプトの実行が禁止されています。バッチファイルのようにダブルクリックで実行するにはレジストリを変更する必要があるのですが、常に実行を許可するのはセキュリティ上よくないです。実行するスクリプトだけ一時的に許可する方法は、以下の記事がとても参考になります。

[PowerShellのExecutionPolicyのスコープとかについて詳しく -Qiita](https://qiita.com/kikuchi/items/59f219eae2a172880ba6)


###ショートカットを作ってダブルクリックで実行

Hello.ps1 のショートカットを作成し、プロパティのリンク先を以下のように変更、作業フォルダーは空欄にします。

`C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -File Hello.ps1`

![aru01.png](https://qiita-image-store.s3.amazonaws.com/0/143735/0703f405-b027-79b4-e620-cfe75874c591.png)

実行時の大きさを最小化しておくと、黒い画面が開かなくてよい感じになりました！

###参考リンク

- [PowerShell の Add-Type と [Reflection.Assembly]](http://tech.guitarrapc.com/entry/2014/03/17/042253)
- [業務改善！Windows PowerShell入門](http://acoustic-groove2.hatenablog.com/)
- [PowerShellでダイアログを表示し入力結果を取得](http://funcs.org/895)
- [Windowsインフラ管理者への道 ＞ 駆け出し管理者へのおすすめ記事]
(http://ebi.dyndns.biz/windowsadmin/content/) 
※少し古い記事ですが、分かりやすくまとまっていてオススメです。