Windows PowerShellを使ってみたメモ

# Windows PowerShellの設定や動作のメモ

Windows Powershellをはじめて触ったので、嬉しくてスクリプトなどを書いてみました。

## 環境

Windows 10 64Bit


## 起動

1. [ Win ] + [ r ] 
2. "powershell" を起動

## ls,cat,manなどのコマンドが使える

bashなどを触っている感覚で作業が出来るのがうれしい。
**[tab] による入力補完もききます。**これがデフォルトなのもうれしい。
今のところ困ってませんが、まだいろいろありそうなので要検証。

## シェルスクリプト

シェルと言えばスクリプトでしょ。

###ポリシーの変更

デフォルトではスクリプトを実行できません。
ポリシーで実行に制限がかかっているようです。
（ポリシーとスコープは下にまとめてあります。）

今回は、次回以降の起動時にスクリプトを自動で実行させる為、以下のコマンドを打ちます。

```Powershell.commandLine
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
```

Set-ExecutionPolicy でポリシーの変更をします。
管理者として実行は必要ありません。 
-Scope オプションを付けることでスコープを指定しています。


CurrentUser で現ユーザーのスコープを変更します。
これで次回起動時に自動でスクリプトが走るようになります。

**ですが、 CurrentUser ポリシー変更には永続性があるのでなるべく変えないほうがいいです。**
今回の設定だと、変更後に誰かが勝手に保存した「謎のスクリプト」を間違って実行してしまう可能性が生まれます。

終わったら

```Powershell.commandLin
> Set-ExecutionPolicy ポリシー名 -Scope CurrentUser
```

で元に戻してあげたほうが良さそうです。

#### ポリシーとスコープまとめ

##### ポリシー一覧

> | ポリシー | 署名付 | 無署名 ローカル | 無署名 リモート | 概要 |
> |:---------|:------:|:--------------:|:---------------:|:-----|
> |Restricted |   ×  | × |× |全てのスクリプトが実行禁止。|
> |AllSigned | ○ | × | × | 署名されているスクリプトのみ実行可能。|
> |RemoteSigned | ○ | ○ | × |ローカルに保存されているスクリプトは実行可能。ダウンロードしたスクリプトは、署名されているもののみ実行可能。|
> |Unrestricted | ○ | ○ | △ |全てのスクリプトが実行可能。ただしインターネットからダウンロードしたスクリプトは、実行するかどうかが確認される。|
> |Bypass | ○ | ○ | ○ | 警告やユーザーへの確認なしに全てのスクリプトが実行可能。怖い。|

##### スコープ一覧(Set-ExecutionPolicyで変更できるもの)

>|スコープ名|概要|永続性|
>|:--------|:---|:---:|
>|Process | 今起動している PowerShell プロセス内のみ。| × |
>|CurrentUser | コンピューターの今のユーザーのみ。レジストリに保存|○|
>|LocalMachine | コンピューターの全ユーザーのグローバル設定。レジストリに保存|○|

Process なら終了時にデフォルトに戻るので安心。

## 今回試してみたこと

### 起動時のスクリプトの作成

1. ```> $PROFILE```+ [ Enter ] で起動時に読み込むスクリプトのパスが表示される。
1. そのパスに移動する。
1. ディレクトリやファイルが存在しなければ作ります。
1. 後は書くだけです。簡単！

自分の環境では  

```Powershell.commandLine
> $PROFILE
> C:\Users\ユーザー名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1    
```
だったのでその場所にファイルを作成しました。

#### 以下 Microsoft.PowerShell_profile.ps1 の内容

```Microsoft.PowerShell_profile.ps1
Set-Alias vim 'D:\vim_ps\vim.exe'
# "> vim hogehoge.c" 等のコマンドでvimを起動できるようにする。

Set-Location D:
# 開始ディレクトリを指定する。

$a = (Get-Host).UI.RawUI
$a.BackgroundColor = "Black"
# デフォルトの青い画面ではvimが恐ろしいほど見にくかったので背景色を変更
# Black (黒) DarkBlue (濃い青) DarkGreen (濃い緑) DarkCyan (濃いシアン) DarkRed (濃い赤) DarkMagenta (濃いマゼンタ) DarkYellow (濃い黄色)
# Gray (灰色) DarkGray (濃い灰色) Blue (青) Green (緑) Cyan (シアン) Red (赤) Magenta (マゼンタ) Yellow (黄色) White (白)
cls

```

***

##### エイリアスの設定

```
Set-Alias vim 'D:\vim_ps\vim.exe'
# "> vim hogehoge.c" 等のコマンドでvimを起動できるようにする。
```

"vim"にD:\...\vim.exeの絶対パスをセットする。

これでPowershell上で

```Powershell.commandLine
> vim hogehoge.c
```

と打てば

```Powershell.commandLine
> D:/vim_ps/vim.exe hogehoge.c
```

と打ったことと同じことになります。
短いコマンドでかんたん + いちいち別窓でエディタを開かずにすむ => うれしい。
PATHを通すのとは少し趣が違います。


***

##### 開始ディレクトリの指定

```
Set-Location D:
# 開始ディレクトリをDドライブ直下に指定する。
```


***

##### 背景色の変更

```
$a = (Get-Host).UI.RawUI
$a.BackgroundColor = "Black"
# デフォルトの青い画面ではエディタが恐ろしいほど見にくかったので背景色を変更
cls
```

いろいろいじればmonokaiのカラーテーマなども使用出来るようでしたが、オシャレ感は求めていないので背景のみ変更。[posh-monoakai Github（参考）](https://github.com/ntwb/posh-monokai)

***

## 終わり

いつもの作業では cmd.exe を使うことが多いですが、比べるとなんとなく進化しているような気がします。
全然大したことをしてませんが、スクリプトって楽しいですね。コマンドライン大好き。


[ Microsoft TechNet PowerShell 公式](https://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner01.aspx)