PowerShell 7.1 の新機能
2020 年 11 月 11 日に、PowerShell 7.1 の一般提供を発表しました。 PowerShell 7.0 において確立された基盤が基になっており、コミュニティの問題に関する作業が重点的に行われ、さまざまな改善と修正が含まれています。 PowerShell が安定した高性能なプラットフォームとして維持されるよう取り組んでいます。
PowerShell 7.1 には、次の機能、更新プログラム、破壊的変更が含まれています。
- 予測 IntelliSense を含む PSReadLine 2.1.0
- PowerShell 7.1 が Microsoft Store に公開されています
- ARM64 をサポートする新しい OS バージョン用に更新されたインストーラー パッケージ
- メインストリームに昇格した 4 つの新しい試験的機能と 2 つの試験的機能
- 使いやすさ向上のためのいくつかの破壊的変更
詳細な変更一覧については、GitHub リポジトリの変更ログを参照してください。
PSReadLine 2.1.0
PowerShell 7.1 には、PSReadLine 2.1.0 も組み込まれています。 このバージョンには、Predictive IntelliSense が含まれています。 Predictive IntelliSense 機能の詳細については、PowerShell ブログのお知らせを参照してください。
Microsoft Store インストーラー パッケージ
PowerShell 7.1 が Microsoft Store に公開されています。 PowerShell リリースは Microsoft Store Web サイトまたは Windows の Store アプリケーションで見つけることができます。
Microsoft Store パッケージの利点:
- Windows に直接組み込まれた自動更新
- Intune や SCCM など、他のソフトウェア配布メカニズムとの統合
注意
$PSHOME
に格納されているシステムレベルの構成設定は変更できません。 これには WSMAN 構成が含まれます。 これにより、リモート セッションが PowerShell のストアベース インストールに接続できなくなります。 ユーザーレベル構成と SSH リモート処理がサポートされていません。
その他のインストーラー
サポートされているオペレーティング システムとサポート ライフサイクルの最新情報については、PowerShell サポート ライフサイクルに関するページをご覧ください。
任意のオペレーティング システムのインストール手順を確認してください。
さらに、PowerShell 7.1 では、Debian、Ubuntu、ARM64 Alpine Linux の ARM32 および ARM64 フレーバーもサポートされています。
公式にはサポートされていませんが、コミュニティでは、Arch および Kali Linux 用のパッケージも提供しています。
注意
Debian 10 以降、CentOS 8 以降、Ubuntu 20.04、Alpine、Arm では、WinRM リモート処理はサポートされていません。 SSH ベースのリモート処理設定の詳細については、「SSH 経由の PowerShell リモート処理」を参照してください。
試験的な機能
試験的な機能の詳細については、試験的機能の使用に関するページを参照してください。
このリリースでは、次の試験的機能がメインストリーム機能になりました。
このリリースでは、次の試験的機能が追加されました。
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
- PowerShell 7.1 では、この試験的機能が拡張され、すべての
*-PSBreakpoint
コマンドレットに Runspace パラメーターが追加されます。 Runspace パラメーターによって、Runspace オブジェクトを指定し、指定した実行空間内のブレークポイントと対話できます。
- PowerShell 7.1 では、この試験的機能が拡張され、すべての
PSNativePSPathResolution - この機能を使用すると、Powershell のパス構文をサポートしていないネイティブ コマンドに PowerShell プロバイダーのパスを渡すことができます。
PSCultureInvariantReplaceOperator -
-replace
演算子ステートメントの左側のオペランドが文字列でない場合、そのオペランドは文字列に変換されます。 機能が有効になっている場合、この変換によって、文字列変換にカルチャ設定が使用されることはありません。PSSubsystemPluginModel は、今後の予測 IntelliSense プラグインをサポートするための基礎となります。
破壊的変更と機能強化
.NET 5.0 での文字列比較動作の変更
PowerShell 7.1 は .NET 5.0 上に構築されており、次の破壊的変更が導入されています。
.NET 5.0 以降、カルチャ不変の文字列比較では、印字されない制御文字が無視されます。
たとえば、次の 2 つの文字列は同一と見なされます。
# Escape sequence "`a" is Ctrl-G or [char]7 'Food' -eq "Foo`ad"
True
ネイティブ コマンドによって
stderr
に書き込まれるときに、$?
が$false
にならないように修正されました (#13395)ネイティブ コマンドは、一般的に、エラーを示すことなく
stderr
に書き込みます。 この変更によって$?
が$false
に設定されるのは、ネイティブ コマンドに 0 以外の終了コードが含まれている場合のみです。 この変更は、試験的機能PSNotApplyErrorActionToStderr
とは関係ありません。$ErrorActionPreference
がネイティブ コマンドのstderr
出力に影響を与えないようになりました (#13361)ネイティブ コマンドは、一般的に、エラーを示すことなく
stderr
に書き込みます。 この変更があっても、stderr
の出力は ErrorRecord オブジェクトで引き続きキャプチャされますが、ErrorRecord がネイティブ コマンドから取得された場合、ランタイムによって$ErrorActionPreference
が適用されなくなります。Unix 時刻の入力を許可するために に名前
-FromUnixTime
を-UnixTimeSeconds
変更Get-Date
(#13084) (感謝) @aetos382!)-FromUnixTime
パラメーターが 7.1-preview.2 の間に追加されました。 パラメーターの名前が、よりデータ型と一致するように変更されました。 このパラメーターは、1970 年 1 月 1 日 0 時 00 分 00 秒以降の秒数を表す整数値を取ります。この例では、Unix 時間 (1970-01-01 0:00:00 以降の秒数で表されます) を DateTime に変換します。
Get-Date -UnixTimeSeconds 1577836800 Wednesday, January 01, 2020 12:00:00 AM
明示的に指定された名前付きパラメーターで、ハッシュテーブル スプラッティングからの同じものを置き換えることができるようになりました (#13162)
この変更により、スプラッティングからの名前付きパラメーターは、明示的に指定されたすべての名前付きパラメーターがバインドされた後にバインドされるように、パラメーター リストの末尾に移動されます。 単純な関数のパラメーター バインドでは、指定された名前付きパラメーターが見つからない場合のエラーはスローされません。 不明な名前付きパラメーターは、単純な関数の
$args
パラメーターにバインドされます。 スプラッティングを引数リストの末尾に移動すると、パラメーターが$args
に表示される順序が変わります。以下に例を示します。
function SimpleTest { param( $Name, $Path ) "Name: $Name; Path: $Path; Args: $args" }
以前の動作では、MyPath が
-Path
にバインドされていません。これは、引数リストの 3 番目の引数であるためです。 ## そのため、Blah = "World"
と共に '$args' に埋め込まれて終了しますPS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPath
この変更により、
@hash
の引数は引数リストの末尾に移動します。 MyPath がリストの最初の引数になるため、-Path
にバインドされます。PS> SimpleTest @hash "MyPath" Name: Hello; Path: MyPath; Args: -Blah: World
switch パラメーター
-Qualifier
を のSplit-Path
位置指定しないようにします (#12960) (感謝) @yecril71pl!)指定されていない場合は、作業ディレクトリを
Start-Process
リテラル パスとして解決します (#11946) (感謝) @NoMoreFood!)-OutFile
Web コマンドレットで パラメーターを次のように-LiteralPath
動作させる (#11701) (感謝)@iSazonov!)数値リテラルの文字列パラメーター バインドを
BigInteger
修正しました (#11634) (感謝) @vexx32!)Windows では、 を使用して、
Start-Process
現在のセッションのすべての環境変数を含むプロセス環境を作成し、 を使用して-UseNewEnvironment
新しい既定のプロセス環境を作成します (#10830) (感謝) @iSazonov!)ScriptBlock
をデリゲートに変換するときに、PSObject
の戻り値の結果が折り返されなくなりました (#10619)ScriptBlock
が C# コンテキストで使用されるデリゲート型に変換されるときにPSObject
の結果を折り返すと、次のような望まない問題が生じます。- 値がデリゲートの戻り値の型に変換されると、基本的に
PSObject
の折り返しが解除されます。 そのため、PSObject
は不要です。 - デリゲートの戻り値の型が
object
の場合、PSObject
で折り返され、C# コード内での操作が困難になります。
この変更後、返されるオブジェクトが基になるオブジェクトになります。
- 値がデリゲートの戻り値の型に変換されると、基本的に