wingetでPowerShellを5系から7系にアップデートする

# はじめに
Windows11 22H2からPowerShellを起動すると、上記のようなメッセージが走るようになります。びっくりマーク付きで強めに詰められてますね。
```
Windows PowerShell
 Copyright (C) Microsoft Corporation. All rights reserved.
 
 新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows
```

表示されているURLにアクセスすると下記のページでPowerShell 7系のインストール方法が説明されています。

https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/migrating-from-windows-powershell-51-to-powershell-7?view=powershell-7.4#installing-powershell-7

MSIでのインストーラーやZIPから展開することもできますが、Microsoftとしては Windows クライアントにへのインストールは`winget`の使用を推奨しているようです。

というわけで、今回はPowerShell 5系から`winget`コマンドでPower Shell 7系をインストールしてみます。

# 前準備
* 現在のPowerShellのバージョン確認
```
> $PSVersionTable
  
  Name                           Value
  ----                           -----
  PSVersion                      5.1.22621.2506
  PSEdition                      Desktop
  PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
  BuildVersion                   10.0.22621.2506
  CLRVersion                     4.0.30319.42000
  WSManStackVersion              3.0
  PSRemotingProtocolVersion      2.3
  SerializationVersion           1.1.0.1
```

+ 社内プロキシなどが存在している場合は下記ページを参照にプロキシ認証設定をしてください

https://qiita.com/kztktr/items/e3a75cd4a06190100180

* `winget`の特定のバージョンには不具合がありますので、確認と対策をしておきましょう

https://qiita.com/kztktr/items/dcbeddd34a036ee670f3

# 作業手順
* PowerShellを管理者権限で起動
* 下記コマンドでインストールするPowerShellのバージョン確認とインストール規約の同意を行います
Preveiw版も表示されますが、無難に通常版をインストールすることにします。
```
> winget search Microsoft.PowerShell
```

```
 'msstore' ソースでは、使用する前に次の契約を表示する必要があります。
 Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction
 ソースが正常に機能するには、現在のマシンの 2 文字の地理的リージョンをバックエンド サービスに送信する必要があります (例: "US")。
 
 すべてのソース契約条件に同意しますか?
 [Y] はい  [N] いいえ:y
 名前               ID                           バージョン ソース
 ------------------------------------------------------------------
 PowerShell         Microsoft.PowerShell         7.4.1.0    winget
 PowerShell Preview Microsoft.PowerShell.Preview 7.4.0.101  winget
```
* 下記コマンドでPowerShell 7系のインストールを実行

```
> winget install --id Microsoft.Powershell --source winget
```

```
見つかりました PowerShell [Microsoft.PowerShell] バージョン 7.4.1.0
 このアプリケーションは所有者からライセンス供与されます。
 Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
 ダウンロード中 https://github.com/PowerShell/PowerShell/releases/download/v7.4.1/PowerShell-7.4.1-win-x64.msi
   ██████████████████████████████   103 MB /  103 MB
 インストーラーハッシュが正常に検証されました
 パッケージのインストールを開始しています...
 インストールが完了しました
```
これでインストール作業は完了です。
あとはアプリからPowerShell 7系が存在するか確認しましょう。
アプリ名が「Windows PowerShell」だと5系、「PowerShell」だと7系になります。念のため` $PSVersionTable`でバージョン確認しておくといいでしょう。

# PowerShell 7 が起動しないんだけど

https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/migrating-from-windows-powershell-51-to-powershell-7?view=powershell-7.4#using-powershell-7-side-by-side-with-windows-powershell-51

PowerShell5系と7系はサイドバイサイド、つまり共存が可能となっています。
ですので、いつも通りにWindowsTerminalからPowerShellを起動しても5系が出てくるということです。
というわけで、WIndowsTerminalのデフォルトのターミナルをPowerShellにしたい場合は以下の感じでやっていきましょう。
設定→スタートアップ→既定のプロファイル「PowerShell」にしましょう。

# ところで5系と7系で何がちがうん？
大きく違うところはオープンソース化されて、LinuxやMacにも対応した点とされています。
LinuxやMacからPowerShellでWindows serverにログインしてCUIだけで操作を完結させたい、つまりMicrosoftとしてはWindows severの需要や裾野みたいなものを拡げたいのかなと個人的には考えられますね。
それと5系で使用できたコマンドの一部が7系では使えなくなってる点にも注意です。