PowerShellシステム要件、バージョン情報メモ

## はじめに
PowerShellのシステム要件やバージョン情報などを調べていたメモの体裁がある程度整ったので公開します。

## Powershellのシステム要件
* WIndows10,11にプレインストールされているのは「PowerShell 5.1」
  * 参考：[Windows PowerShell のシステム要件(Windows PowerShell 5.1)](https://docs.microsoft.com/ja-jp/powershell/scripting/windows-powershell/install/windows-powershell-system-requirements?view=powershell-5.1#windows-powershell-51)
* 「Microsoft .NET Framework 4.5 のフル インストールが必要」
  * 参考：[Windows PowerShell のシステム要件(Microsoft .NET Framework の要件)](https://docs.microsoft.com/ja-jp/powershell/scripting/windows-powershell/install/windows-powershell-system-requirements?view=powershell-5.1#microsoft-net-framework-requirements)
* Windows10の1903以降にプレインストールされているのは`.NET Framework 4.8`
  * 参考：[.NET Framework のシステム要件(サポートされているクライアント オペレーティング システム)](https://docs.microsoft.com/ja-jp/dotnet/framework/get-started/system-requirements#supported-client-operating-systems)<br>
 (執筆時点でWindows10 21H2の情報はなかった)
  * 確認：
        * `(Get-Item 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\').GetValue("Version")`
            * 参考：[PowerShellを使ってインストール済の.NET Frameworkのバージョンを確認する](https://www.fenet.jp/dotnet/column/windows/1030/)
  * 結果：`4.8.04084`
* `.NET Framework 4.8`が`.NET Framework 4.5`の上位互換だと仮定すれば、Windows10の1903以降では「PowerShellから`.NET Framework 4.8`の環境を利用して`.NET Framework 4.5`の機能が使える」と考えて良さそう。

## PowerShellからのバージョン確認
### Windowsのバージョン情報
* 参考：[実行しているWindowsバージョンは何ですか?](https://docs.microsoft.com/ja-jp/windows/client-management/windows-version-search)
   *  `chcp 65001; systeminfo |findstr /B /C:"OS Name" /B /C:"OS Version"`
     * `systeminfo`の出力が環境依存するので、要改善。
     * `chcp`で切り替えると画面がクリアされるのでイマイチ。
   * `slmgr /dlv`は表示がわかりにくい。

### まとめてバージョン確認
```
PS > (gci function:ver).definition
(systeminfo | ?{$_.Contains("OS")})[0,1]; ($PSVersionTable | Out-String -Stream)[3].trim() -replace ' +',":`t`t"
PS > ver
OS 名:                  Microsoft Windows 10 Home
OS バージョン:          10.0.19044 N/A ビルド 19044
PSVersion:              5.1.19041.1320
```
コマンドの実行結果の中から必要な行だけ配列要素として取り出して繋げると、コンパクトでそこそこ見やすくなります。
### その他
#### レジストリから取得
```
PS > (gi 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\').GetValue("ProductName")
Windows 10 Home
PS > (gi 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\').GetValue("DisplayVersion")
21H2
```
* 参考：
  * [Windows10 の OS のバージョンやビルド番号を調べる手順](https://nodachisoft.com/common/jp/article/jp000011/)
  * [PowerShell だけで レジストリの値とその種類を取得したい](https://qiita.com/mmurasawa/items/fa846259a7b8370d6032)

#### wmic利用(非推奨)
* `(wmic os get caption)[2]`
  * 参考：[Windows OS のバージョン情報をコマンドラインから調べる](https://maku77.github.io/windows/admin/os-version.html)

#### cmd利用
* `(cmd /c ver)[1]`

## 参考
* [What is the difference​ between dot methods(.Replace) and hyphen methods(-replace)?](https://www.reddit.com/r/PowerShell/comments/68kup3/what_is_the_difference_between_dot_methodsreplace/)
* [正規表現について - PowerShell(正規表現での置換)](https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_regular_expressions?view=powershell-5.1#substitutions-in-regular-expressions)
* [正規表現言語 - クイック リファレンス](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-language-quick-reference)
* [String.Trim メソッド](https://docs.microsoft.com/ja-jp/dotnet/api/system.string.trim?view=netframework-4.5)
* [String.Contains メソッド](https://docs.microsoft.com/ja-jp/dotnet/api/system.string.contains?view=netframework-4.5)
* [配列について - PowerShell(配列の読み取り)](https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_arrays?view=powershell-5.1#reading-an-array)
* [PowerShellのバージョンを調べる方法](https://windows-podcast.com/sundayprogrammer/archives/937)
* [Windows 10 リリース情報(サービス チャネル)](https://docs.microsoft.com/ja-jp/windows/release-health/release-information#winrelinfo_container)
  * Wikipedia：[Microsoft Windows 10のバージョン履歴](https://ja.wikipedia.org/wiki/Microsoft_Windows_10%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%B1%A5%E6%AD%B4)
  * Wikipedia(英)：[Windows 10 version history](https://en.wikipedia.org/wiki/Windows_10_version_history)