Posted at

Windows 10にPowerShell 6をインストールしてみた

More than 1 year has passed since last update.

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を実行するとNugetPowerShellGetが表示された。モジュールインストールのためにまずこれらの環境を作る、ということは必要なさそう。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-ModuleInstall-Module等の実行時、プロキシ経由でモジュールインストールする時には-Proxy、プロキシが認証を必要とする場合は合わせて-ProxyCredentialパラメータを指定する。以下にまとめた。


COMオブジェクトの使用

Windows PowerShellではなくマルチOSのPowerShell CoreでCOMオブジェクトって使えるのかなと思った。とりあえずWindows上であれば、以下でExcelを起動し、可視状態にすることができた。

$excel = New-Object -ComObject Excel.Application

$excel.Visible = $true


本ページ内容は筆者が参照の便のためにある時点でまとめた個人的なメモです。内容を保証するものではなく、また筆者の所属組織等とは一切かかわりがありません。