次の方法で共有


PowerShell 7.1の新要素

2020年11月11日、PowerShell 7.1の一般公開 を発表 しました。 PowerShell 7.0で築かれた基盤を基に、私たちの取り組みはコミュニティの問題に焦点を当て、多くの改善や修正を含んでいます。 PowerShellが安定し、パフォーマンスの高いプラットフォームであり続けることを約束します。

PowerShell 7.1には、以下の機能、アップデート、そして重大な変更が含まれています。

  • PSReadLine 2.1.0(予測的IntelliSenseを含む)
  • PowerShell 7.1はMicrosoft Storeに公開されました
  • ARM64をサポートする新しいOSバージョン向けに更新されたインストーラーパッケージ
  • 4つの新しい実験的特徴と2つの実験的特徴が主流に昇格
  • 使いやすさを向上させるためのいくつかの変更点

変更の完全な一覧については、GitHub リポジトリの CHANGELOG を参照してください。

PSReadLine 2.1.0

PowerShell 7.1にはPSReadLine 2.1.0も含まれています。 このバージョンにはPredictive IntelliSenseが含まれています。 予測的IntelliSense機能の詳細については、PowerShellブログの 告知 をご覧ください。

Microsoft Store インストーラーパッケージ

PowerShell 7.1はMicrosoft Storeに公開されました。 PowerShellのリリースは Microsoft Store のウェブサイトやWindowsのStoreアプリケーションで見つけることができます。

Microsoft Store パッケージの利点:

  • Windows に直接組み込まれた自動更新
  • IntuneやSCCMなど他のソフトウェア配布メカニズムと統合されます

$PSHOMEに保存されたシステムレベルの設定は変更できません。 これには WSMAN 構成が含まれます。 これにより、リモート セッションが PowerShell のストアベース インストールに接続できなくなります。 ユーザーレベル構成と SSH リモート処理がサポートされています。

その他の設置業者

サポートされているオペレーティングシステムやサポートライフサイクルに関する up-to情報については、 PowerShellサポートライフサイクルをご覧ください。

お好みのOSのインストール手順を確認してください:

さらに、PowerShell 7.1はDebian、Ubuntu、ARM64のAlpine LinuxのARM32およびARM64バージョンをサポートしています。

公式にはサポートされていませんが、コミュニティは Arch やKali Linux向けのパッケージも提供しています。

Debian 10+、CentOS 8+、Ubuntu 20.04、Alpine、Armは現在、WinRMリモートをサポートしていません。 SSHベースのリモート設定の詳細については、「 PowerShell Remoting over SSH」をご覧ください。

試験的な機能

試験的特徴の詳細については、「試験的特徴を使用する 」を参照してください。

以下の実験的な特徴は、このリリースで主流の機能となっています。

このリリースでは以下の実験的な機能が追加されました:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1はこの実験的な機能を拡張し、すべての*-PSBreakpointコマンドレットにRunspaceパラメータを追加しています。 Runspaceパラメータは、指定されたランスペース内のブレークポイントと相互作用するRunspaceオブジェクトを指定します。
  • PSNativePSPathResolution - この機能は、PowerShellのパス構文をサポートしないネイティブコマンドにPowerShellプロバイダーパスを渡すことができます。

  • PSCultureInvariantReplaceOperator - -replace 演算子文の左オペランドが文字列でない場合、そのオペランドは文字列に変換されます。 この機能を有効にすると、変換は文字列変換にCulture設定を使用しません。

  • PSSubsystemPluginModel は、将来のPredictive 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 に設定されます。 この変更は実験的特徴 PSNotApplyErrorActionToStderrとは無関係です。

  • ネイティブコマンドの出力に$ErrorActionPreferencestderr影響しないようにしてください(#13361)

    ネイティブコマンドが失敗を示す意図なしに stderr に書き込みを行うことはよくあります。 この変更により、出力stderrErrorRecordオブジェクトにはまだキャプチャされますが、ErrorRecordがネイティブコマンドから来ている場合$ErrorActionPreferenceランタイムは適用されません。

  • Unixの時間入力を可能にするために-FromUnixTimeGet-Dateの上で-UnixTimeSecondsにリネームしてください(#13084)(ありがとうございます)@aetos382!)

    -FromUnixTimeパラメータは7.1からプレビュー.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 は引数リストの3番目の引数であるため -Path に縛られません。 ## だから結局『$args』に詰め込まれてしまいます Blah = "World"

    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
    
  • スイッチパラメータを位置決め-QualifierSplit-Path(#12960)にしてください(ありがとうございます)@yecril71pl!)

  • 指定されていない場合は、作業ディレクトリを Start-Process のリテラルパスとして解決してください(#11946)(ありがとうございます) @NoMoreFood!)

  • ウェブコマンドレットのパラメータ-OutFile-LiteralPathのように動作させる(#11701)(ありがとう)@iSazonov!)

  • 数値リテラルの文字列パラメータバインディング BigInteger 修正(#11634)(ありがとう) @vexx32!)

  • Windowsでは、 Start-Process 現在のセッションのすべての環境変数でプロセス環境を作成し、 -UseNewEnvironment を使って新しいデフォルトのプロセス環境(#10830)を作成します(ありがとうございます) @iSazonov!)

  • ScriptBlockを代理に変換する際、リターン結果PSObjectをラップしない(#10619)

    ScriptBlockがC#コンテキストで使用されるデリゲート型に変換されると、結果をラッピングPSObjectすると不要なトラブルが生じます:

    • 値が代理リターン型に変換されると、 PSObject は実質的にアンラップされます。 だから PSObject は不要です。
    • デリゲートリターン型が objectされると、 PSObject でラップされてしまい、C#コードでの扱いが難しくなります。

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