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 オブジェクトを指定し、指定した実行空間内のブレークポイントと対話できます。
  • 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 時刻入力を許可するように名前を-UnixTimeSecondsオンにGet-Date変更 -FromUnixTime (#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を (#12960) のSplit-Path位置指定しない (Thanks@yecril71pl!)

  • 指定されていない場合の Start-Process リテラル パスとして作業ディレクトリを解決します (#11946) (Thanks @NoMoreFood!)

  • -OutFile Web コマンドレットのパラメーターを次のように-LiteralPath動作させる (#11701) (感謝)@iSazonov!)

  • 数値リテラルの文字列パラメーター バインドを BigInteger 修正しました (#11634) (Thanks @vexx32!)

  • Windows では、 Start-Process 現在のセッションのすべての環境変数を含むプロセス環境が作成され、 -UseNewEnvironment 新しい既定のプロセス環境が作成されます (#10830) (Thanks @iSazonov!)

  • ScriptBlock をデリゲートに変換するときに、PSObject の戻り値の結果が折り返されなくなりました (#10619)

    ScriptBlock が C# コンテキストで使用されるデリゲート型に変換されるときに PSObject の結果を折り返すと、次のような望まない問題が生じます。

    • 値がデリゲートの戻り値の型に変換されると、基本的に PSObject の折り返しが解除されます。 そのため、PSObject は不要です。
    • デリゲートの戻り値の型が object の場合、PSObject で折り返され、C# コード内での操作が困難になります。

    この変更後、返されるオブジェクトが基になるオブジェクトになります。