Windows 10にPowerShell 6をインストールしてみました。気づいたことをメモしておきます。
インストール方法
PowerShellではなくPowerShell Coreをインストールする。
PowerShell 6 以降を使う場合は、Windows PowerShell ではなく PowerShell Core をインストールする必要があります。 詳細については、「Windows への PowerShell Core のインストール」を参照してください。
Windows PowerShell のインストール | Microsoft Docs
PowerShell CoreはMSのGitHubページで配布されている。
PowerShell を Windows クライアントまたは Windows Server にインストールするには (Windows 7 SP1、Server 2008 R2 以降で機能)、MSI パッケージを弊社の GitHub リリース ページからダウンロードします。
Windows への PowerShell Core のインストールInstalling PowerShell Core on Windows | Microsoft Docs
ここでは、リリース ページにある最新プレビュー版ではなく、READMEにまとめられているリンクから、Windows (x64)用の安定版(Downloads (stable))のmsiファイルだったPowerShell-6.0.2-win-x64.msiを取得し、インストールした。
インストーラーに従って進めていくだけだったけど、手順説明とか欲しいようであれば「Windows 7にPowerShell 6.0をインストールする - 再び - しばたテックブログ」が参考になりそう。
スタートメニュー
Windowsのスタートメニュー内で、「PowerShell」フォルダ内に「PowerShell 6.0.2」だけが作成されていた。PowerShell 5.xまでは「Windows PowerShell」フォルダ内に「Windows PowerShell」「Windows PowerShell ISE」が作成されていた。
バージョン
$PSVersionTableの出力内容に一部差異があった。
| Name | PS Core 6.0.2 | PS Desktop 5.1.15063.909 |
|---|---|---|
| PSVersion | 6.0.2 | 5.1.15063.909 |
| PSEdition | Core | Desktop |
| BuildVersion | 10.0.15063.909 | |
| CLRVersion | 4.0.30319.42000 | |
| GitCommitId | v6.0.2 | |
| OS | Microsoft Windows 10.0.15063 | |
| Platform | Win32NT | |
| PSCompatibleVersions | {1.0, 2.0, 3.0, 4.0...} | {1.0, 2.0, 3.0, 4.0...} |
| PSRemotingProtocolVersion | 2.3 | 2.3 |
| SerializationVersion | 1.1.0.1 | 1.1.0.1 |
| WSManStackVersion | 3.0 | 3.0 |
エンジンの更新 | PowerShell Core 6.0 の新機能What's New in PowerShell Core 6.0 | Microsoft Docsに説明されていた。
モジュールの自動読み込みパス
$env:PSModulePathは以下になっていた。
$env:PSModulePath -split ";" | sort
c:\program files\powershell\6.0.2\Modules
C:\Program Files\PowerShell\Modules
C:\Users\tsukamoto\Documents\PowerShell\Modules
PowerShell 5.0.1環境の方は以下になっていた。
$env:PSModulePath -split ";" | sort
C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\ResourceManager\AzureResourceManager\
C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\ServiceManagement\
C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\Storage\
C:\Program Files\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules\
C:\Users\tsukamoto\Documents\WindowsPowerShell\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
C:\Program Files\以下についてもC:\Users\tsukamoto\Documents\以下についても、WindowsPowerShell\ModulesではなくPowerShell\Modulesになっていて、共通するパスはない。このため、PowerShell 5.0.1環境でインストールまたは配置したモジュールは、PowerShell 6.0.2では自動読込されなかったし、Import-Moduleでも見つけられなかった。
Windows PowerShell との後方互換性 | PowerShell Core 6.0 の新機能What's New in PowerShell Core 6.0 | Microsoft Docsに説明されていた。これまでのものは「WIndows PowerShellモジュール」という扱いになり、以下を実行することでパスを追加できる様子(まだ実施してない)。
Install-Module WindowsPSModulePath -Force
Add-WindowsPSModulePath
ConvertTo-Jsonのインデントが変わった
ConvertTo-Jsonのインデントが固定幅になっていて、見やすかった。
PS C:\Program Files\PowerShell\6.0.2> $PSVersionTable | ConvertTo-Json
{
"Platform": "Win32NT",
"WSManStackVersion": {
"Major": 3,
"Minor": 0,
"Build": -1,
"Revision": -1,
"MajorRevision": -1,
"MinorRevision": -1
},
(以下略)
PowerShell 5までは可変幅で、インデントが深くなると泣きそうだった。
$PSVersionTable | ConvertTo-Json
{
"PSVersion": {
"Major": 5,
"Minor": 1,
"Build": 15063,
"Revision": 909,
"MajorRevision": 0,
"MinorRevision": 909
},
"PSEdition": "Desktop",
(以下略)
コマンドレットの更新 | PowerShell Core 6.0 の新機能What's New in PowerShell Core 6.0 | Microsoft Docsの「JSONコマンドレット」に説明されていた。
NuGetやPowerShellGetはすぐに使える
Get-PackageProviderを実行するとNugetやPowerShellGetが表示された。モジュールインストールのためにまずこれらの環境を作る、ということは必要なさそう。ProviderPathを見る限り、たぶんPowerShell Coreに同梱されている。
Get-PackageProvider | Select Name, Version, ProviderPath
Name Version ProviderPath
---- ------- ------------
NuGet 2.8.5.210 C:\program files\powershell\6.0.2\Modules\PackageManagement\1.1.7...
PowerShellGet 1.6.0.0 C:\program files\powershell\6.0.2\Modules\PowerShellGet\1.6.0\PSM...
プロキシ経由でのモジュールインストール
Find-ModuleやInstall-Module等の実行時、プロキシ経由でモジュールインストールする時には-Proxy、プロキシが認証を必要とする場合は合わせて-ProxyCredentialパラメータを指定する。以下にまとめた。
COMオブジェクトの使用
Windows PowerShellではなくマルチOSのPowerShell CoreでCOMオブジェクトって使えるのかなと思った。とりあえずWindows上であれば、以下でExcelを起動し、可視状態にすることができた。
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
本ページ内容は筆者が参照の便のためにある時点でまとめた個人的なメモです。内容を保証するものではなく、また筆者の所属組織等とは一切かかわりがありません。