初心者でもかんたん♪　Powershell 

# Powershell 基礎

お手軽に何か新しい言語を学びたいな。
簡単に学べて、
面倒な実行環境など不要で、
化石になっていない言語とかがいいな・・・。

**→PowerShellをオススメします！！！！！**


PowerShellは、Microsoftが開発した言語。
（＝Windowsであれば大体使える、Linuxだと動作が少し怪しいところある）
Windowsユーザであれば、誰でも簡単に開発できます。

## Powershellを実際に動かしてみる

**１．デスクトップにメモ帳を置く**。
　![スクリーンショット 2022-03-19 101957.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/5e5cfc30-f809-11c2-c5b1-b1df09624a2b.png)

**２．ファイル名、拡張子を変える。**
test.ps1
　![スクリーンショット 2022-03-19 102054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/013b1f25-f7f8-61e3-6b01-324b55e5693e.png)

**３．ソースを記述する**
実行環境１：（メモ帳）★とりあえず動かしてみたい人向け

メモ帳に以下を記述して保存する。
　```Write-Host("Hello")	```
　```Read-Host("end")```

[ 解説 ]
　Write-Host
　　　コンソール出力します。

　Read-Host
　　　コンソールを勝手に閉じないようにします。
　　　Enterなどを押すとコンソールが閉じます。

　![スクリーンショット 2022-03-19 103155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/e8a64170-466b-010f-80d0-315f6ff59d68.png)

**４.PowerShell実行**
test.ps1を右クリック→PowerShellで実行をクリック


　![スクリーンショット 2022-03-19 103628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/9cdadce5-170f-18c0-eb8c-4b97d20f2a5f.png)

結果
　![スクリーンショット 2022-03-19 105042.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/f7776b39-fda5-c778-5a42-f91e6b3df511.png)




**〇実行権限などでエラーが出る場合**
（１）私用PCで、自分が作ったPowerShellを実行する場合
　![スクリーンショット 2022-03-19 105718.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/a8c5a9c2-fae9-31fd-abb0-04e73d660b77.png)

PowerShellを選択し、起動させます。
　![スクリーンショット 2022-03-19 105834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/c7c656d4-0b61-af0b-87ca-7bbfe6626b6e.png)


実行ポリシーの変更の変更を行う。
　```Set-ExecutionPolicy RemoteSigned　```
（Ctrl + C でコピーして、PowerShell上で右クリックで貼り付け）

> 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシー	を変更すると、about_Execution_Policiesのヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y

yを押してEnterを押す。

（２）業務環境である場合
PowerShellの実行を許可しても良いか、上司に確認を取ってください。
確認を取った上で、（１）を実行してください。

**---参考---**
   Restricted    
　　　★WindowsクライアントPCデフォルト設定
　　　PowerShellの実行：許可しない　
　　　インターネット：デジタル署名必要あり。
　　　ローカル：署名必要あり。
   RemoteSigned  
　　　★WindowsサーバPCデフォルト設定
　　　PowerShellの実行：許可
　　　インターネット：デジタル署名必要あり。
　　　ローカル：署名必要なし。
　 AllSigned     　
　　　PowerShellの実行：許可　　　　　　
　　　インターネット：デジタル署名必要あり。　　　　　　　
　　　ローカル：署名必要あり。
   Unrestricted
　　　PowerShellの実行：許可　
　　　インターネット：デジタル署名必要なし。
　　　ローカル：署名必要なし。
   Bypass        
　　　★何もブロックされず、警告やプロンプトは表示されない。
　　　PowerShellの実行：許可
　　　インターネット：デジタル署名必要なし。
　　　ローカル：署名必要なし。


## Powershellの世界に、さらに踏み込む

PowerShellは癖が強い！！:disappointed_relieved:
でも、その分愛着も沸きます。
もう少し、いろんなことしてみます。

```
#コメントはこう書きます。
#[String]　文字列型定義(なくても良い）
#private　privateスコープ（なくても良い）
#コメントはこう書きます。
[String]$private:power = "Power"
[String]$private:shell = "Shell"

[int]$private:one = 1
[int]$private:two = 2

$powershell = $power + $shell
$type = $powershell.GetType()
Write-Host($powershell)
Write-Host("文字列: " + $type)

$three = $one + $two
$type = $three.GetType()
Write-Host($three)
Write-Host("数値: " + $type)

Read-Host("end")
```
日本語の文字化けを防ぐために、UTF8（BOM付き）にします。
名前を付けて保存 → **文字コードをUTF8（BOM付き）**

![スクリーンショット 2022-03-19 114656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/325ecb91-38ed-66c8-96ad-f9caa843b149.png)

test.ps1を右クリック→PowerShellで実行をクリック
　![スクリーンショット 2022-03-19 103628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/9cdadce5-170f-18c0-eb8c-4b97d20f2a5f.png)

結果
　　![スクリーンショット 2022-03-19 120418.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779673/f5ca7c01-8d32-3e5a-4db6-a6586da5d465.png)

## :angel:　Powershell雑談

```
#パターン１
[String]$private:power = "Power"

#パターン２
[String]$power = "Power"

#パターン３
$private:power = "Power"

#パターン４
$power = "Power"
```
これって、言ってしまえばほぼ同じ。
型無しでもよいし、privateスコープを付けずに
どこから参照できるようにしても良いのです。

打つ量が減るので、パターン４が１番良くない？と思いますか・・・？
私は、開発するのであれば「パターン１」の書き方が一番好ましいと思います。
開発規模によると思いますが、プログラムが長くなればなるほど「型」が重要になります。
可読性、後々の修正コストを考えて、型やスコープを明記することをお勧めします。


## 最後に
Powershellの技術を身に着けて、損はないと思います。
インストール制限が厳しい現場で、Powershellを使うという選択肢もあるのではないでしょうか。
プログラミングはじめましての方にも、複雑な実行環境が不要なので
挑戦しやすいのではないかな、と思います。

次回、~~私の気力があれば、~~ Powershellでエクセルを操作する入門編の記事を書きたいと思っています。 


■参考文献
https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.2

https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_scopes?view=powershell-7.2