先日、「PowerShell 7.0.0-Preview.3」が公開された。本連載では、Visual Studio Codeの解説を進めているが、一旦中断して、アップデート方法と変更点を紹介しておこう。

PowerShell 7.0.0 Preview3へのアップデート方法

2019年5月30日(米国時間)にPowerShell Coreの次のメジャーアップグレードバージョンへ向けたプレビュー版「PowreShell 7.0.0-Preview.1」が公開された。1ヶ月半後の2019年7月17日(米国時間)には「PowerShell 7.0.0-Preview.2」が、そこからさらに1ヶ月後の2019年8月20日(米国時間)には「PowerShell 7.0.0-Preview.3」が公開されている。

Microsoftは月に1回ほどのペースでPowerShell 7のプレビュー版を更新することで、正式リリースへ向けた作業を進めている。この新しいプレビュー版を利用するには、すでにインストールされているプレビュー版をアンインストールする必要がある。

次のように設定アプリケーションの「アプリ」から「PowerShell 7-preview-x64」を選択し、「アンインストール」をクリックする。

すでにPowerShell 7-Previewがインストールされている場合、先にアンインストールを行う

次に、PowerShell CoreのGitHubページから最新のパッケージをダウンロードしてくる。


ダウンロードしてきたパッケージをダブルクリックしてインストールを実施すればよい。

Windows向けのインストーラをダブルクリックしてインストールを実施

上記スクリーンショットはWindows 10で実施したものだが、macOSでも操作はほとんど同じだ。Linuxの場合にはSnapを使うのがもっとも簡単で、インストール済みであればすでに最新のプレビュー版にアップデートが実施されることだと思う。

PowerShell 7.0.0-Preview.3での変更点

参考までに、Preview.3における変更点を次にまとめておく。かなりの数に及ぶことがわかる。

  • UNIX系プラットフォームにおけるStop-Processコマンドレットのkillコマンドへのエイリアスを廃止
  • PowerShellをログインシェルとして利用する機能をサポート(pwsh —Login / pwsh -l)
  • AdditiEnal Telemetry機能の追加
  • ForEach-Object -Parallel機能の追加(実験段階)
  • クラスベースリソースに対するGet-DscResourceを動作するように変更
  • _runspaceDebugCompleteEventイベントを削除する機能を追加
  • システムロックダウンモードでデバッガを無効にした場合に発生していたパフォーマンスリグレッションを修正
  • NanoServerとIoTの双方のチェックの代わりにPlatform.IsWindowsDesktopを使用
  • 実験的機能をデフォルトで有効化するように変更
  • pwshに対して-staおよび-mtaスイッチを有効化
  • PowerShellリモートでブレークポイントを利用する場合の表示を改善
  • AppXリパースポイントのサポートを追加
  • Get-Module -FullyQualifiedNameでのモジュール名検索を大文字小文字を区別するように変更
  • PSModuleInfoフォーマッタにPreReleaseラベルを追加
  • 一致した文字列のみを返すためのSelect-String -Rawスイッチを追加
  • MakePath()メソッドにおけるアロケーションを削減
  • Escape()およびUnescape()におけるアロケーションを削減
  • システムDLLが存在するかどうかチェックする余計なチェック処理を廃止
  • 値型の引数をPSTraceSource.WriteLineに渡すときのボックス化を回避
  • nanoserver.tests.ps1にライセンスヘッダを追加
  • foreach制御構文に-parallelおよび-throttlelimitを予約追加
  • switch制御構文に-parallelおよび-throttlelimitを予約追加
  • ワークフローデバッグコードを非推奨に変更
  • InternalCommands.csにおけるスタイル問題を修正
  • 内部で使用しているHelpCategory.Workflow列挙の非推奨に変更
  • System.Diagnostics.EventLogとの衝突を回避するようにMicrosoft.PowerShell.CoreCLR.Eventingをアップデート
  • コンソールホストの起動時にはプロセス開始時間を収集しないように変更
  • ThreadAbortExceptionコードを削除(.NET Core 3.0が利用しないため)
  • LocationGlobberにおけるnameof()をサポート
  • PathInfoにおけるnameof()をサポート
  • ハンガリー語の接頭辞を修正
  • Issueテンプレートにおけるスペルミスを修正
  • セキュリティ問題に対処するためにmarkdownlistテストを削除
  • WildcardPattern.Escape()にテストを追加
  • Unescape()にテストを追加
  • Dockerリリーステストをクリーンナップ
  • Microsoft.Management.Infrastructureを2.0.0-preview.2へアップデート
  • .NET Coreを.NET Core 3.0 preview.8へアップデート
  • NJsonSchemaを10.0.22へアップデート
  • Microsoft.PowerShell.CoreCLR.Eventing.dllを例外リストに追加
  • Microsoft.CodeAnalysis.CSharpを3.2.1へアップデート
  • macOSにおけるビルド問題を修正

PowerShell 7.0.0-Preview.2での変更点

ちなみに、Preview.2における変更点は次のとおりだ。

  • PSProxyJobを削除
  • システムがロックダウンモードにある場合にEnter-PSHostProcessコマンドレットを無効化
  • 論理値へのキャスティングと$nullを比較している場合、DBNull.ValueとNullString.Valueを$nullとして扱うように変更
  • キーワードにちなんだメソッド名をつけることを許可
  • 散発的に発生するCLRクラッシュを回避するために、いくつかのCOM APIが厳密にSTAの場合にはSTAスレッドにおいてJumpListを作成するように変更
  • NanoServerおよびIoTにおいてJumpListをスキップ
  • 引数名付きのCOMメソッドシグネチャを表示するように変更
  • 倍精度/浮動小数を文字列に変換する際に元の精度を使うように変更
  • Import-DscResourceに対してDSC組み込みリソースの上書きを許可する必要があるように変更
  • ConsoleShell.StartにInitialSessionStateを渡す機能を追加
  • Read-Host -Prompt使用時にコンソールホストがコマンドプロンプトモードにならないように変更
  • Start-Process http://bing.com使用時の問題を修正
  • -split演算子使用時に負の値を利用できるように変更
  • LinuxにおけるDSCコンパイルをサポート
  • Set-Serviceに-SecurityDescriptorSddlパラメータを追加
  • OneDriveフォルダからのファイルの場合に自動的に行われるダウンロード処理に関する問題の修正
  • CertificateProviderにおける誤った比較処理を修正
  • HistoryInfoの表示時に期間を表示するように変更
  • UseAbbreviationExpansionを正式な機能に変更
  • TempDriveを正式な機能に変更
  • Get-ChildItem -Pathにおいてワイルドカードを使った場合のバグを修正
  • WildcardPattern.IsMatchで指定したパターンの最後がアスタリスクだった場合に処理を高速化
  • 不要なメモリ割り当てを回避するためにWildcardPatternにおけるいくつかの処理をループの外に移動
  • 不必要なアロケーションとボクシングを回避することでForeach-Objectの処理を2倍高速化
  • PSVersionInfo.PSVersionのアクセスに静的キャッシュを使用して処理を高速化
  • NavigationCmdletProvider.NormalizePath()におけるメモリ割り当てを削減
  • ワイルドカードを含まない場合のワイルドカード処理を高速化
  • メモリ割り当てを削減するためにClrFacade.GetAssemblies(string)においてAssembly.GetName()の使用を変更
  • 行コメントとマッチングワイルドカードパターンのトークン時にintp[]とint[,]を回避するように変更
  • プライベートコメントに対処できるようにログ生成時の処理を変更
  • markdown-link.tests.ps1におけるバグを修正
  • セキュリティ問題に対処するためにmarkdownlintテストを削除
  • CompiledScriptBlock.csをクリーンナップ
  • ワークフローコードをクリーンナップ
  • 削除してから追加するという処理の代わりに、AddOrUpdate()を使って実行スペースを登録
  • 余計なカッコを追加して発生するPossibleIncorrectUsageOfAssignmentOperatorルール違反を抑制
  • GetModules()においてAddRangeを使用するように変更
  • IndexOf(char)オーバーロードを使うようにコードをクリーンナップ
  • 定数とメソッドを単一のCharExtensionsクラスに移行
  • GetComputerInfoCommandからLCIDToLocaleName P/Invokeを削除
  • パーサーテストをクリーンナップ
  • EtwActivityの空コンストラクタを削除
  • IsTransparentProxyに関するデッドコードを削除
  • コードコメントにおけるスペルミスを修正
  • CimAsyncOperationsのスタイルを修正
  • ModuleCmdletBaseのCodeFactorスタイル問題を修正
  • ConsoleHostにおけるSetProfileRootとStartProfileの使用をクリーンナップ
  • パーサーテストにおける空白処理を改善
  • Process.csにおいて新しいstring.ConCat()を使用するように変更
  • scriptblock.cs周りのコードをクリーンナップ
  • Windowsにおける複雑な要求を満たすようにテストパスワード生成ルールを変更
  • New-Item -Forceに対してテストを追加
  • gulpバージョンを修正
  • ci.psm1のインデントを修正
  • いくつかのTravis-CI参照を削除
  • Dockerイメージのリリーステストを改善
  • グローバルツールをインストールするためにyarnを使うように変更
  • Azure DevOps Windows CIにおけるzipダウンロード問題を回避するように変更
  • ホストテストのためにPowerShell SDKバージョンをアップデート
  • 参照アセンブルに対するターゲットフレームワークをnetcoreapp3.0へアップデート
  • netDumbsterのPinバージョンを2.0.0.4へアップデート
  • Windowsにおけるfxdependentパッケージを2つのパッケージへ分割
  • System.Data.SqlClientをアップデート
  • System.Security.AccessControlをアップデート
  • ログコマンドを変更するためにパフォーマンスタグを追加
  • .Net Core 3 SDKをpreview6へアップデート
  • Nugetパッケージを3.0-preview6へアップデート
  • macOSにおいて/etc/shellsを追加
  • Markdig.Signedを0.17.1へアップデート
  • SDesiredStateConfiguration nugetパッケージを6.2.0へアップデート
  • ThreadJobを2.0.1へアップデート
  • PowerShellGetを2.2へアップデート
  • PackageManagementを1.4.3へアップデート
  • NJsonSchemaを10.0.21へアップデート
  • System.Net.Http.WinHttpHandlerを4.5.4へアップデート
  • Microsoft.ApplicationInsightsを2.10.0へアップデート

正式採用へ向けた動きが見える


Preview.3とPreview.2の変更点をみるとわかるように、かなり細かいものだ。正式リリースへ向けて着実にデバッグと動作のすり合わせを進めているといった状態だ。

MicrosoftはPowerShell 7をWindows PowerShell 5の後釜に据えることを発表した。このため、現在のPowerShell 7プレビュー版で進めている開発はWindows PowerShell 5との互換性を確保することに注力されているように見える。どのような形式でPowerShell 7が提供されていくのかは不透明だが、正式採用へ向けて本気で進めている点は間違いなさそうだ。

参考資料