PowerShell Core 6.0 の新機能What's New in PowerShell Core 6.0

PowerShell Core 6.0 は、異機種混合環境とハイブリッド クラウド用に構築されたオープン ソースのクロスプラットフォーム (Windows、macOS、Linux) である、PowerShell の新しいエディションです。PowerShell Core 6.0 is a new edition of PowerShell that is cross-platform (Windows, macOS, and Linux), open-source, and built for heterogeneous environments and the hybrid cloud.

.NET Framework から .NET Core への移行Moved from .NET Framework to .NET Core

PowerShell Core では、ランタイムとして .NET Core 2.0 を使用します。PowerShell Core uses .NET Core 2.0 as its runtime. .NET core 2.0 を使用することで、PowerShell Core を複数のプラットフォーム (Windows、macOS、Linux) で動作させることができます。.NET Core 2.0 enables PowerShell Core to work on multiple platforms (Windows, macOS, and Linux). PowerShell Core では、PowerShell のコマンドレットとスクリプトで使用される、.NET Core 2.0 によって提供される API セットも公開します。PowerShell Core also exposes the API set offered by .NET Core 2.0 to be used in PowerShell cmdlets and scripts.

Windows PowerShell では、.NET Framework ランタイムを使用して PowerShell エンジンをホストしていました。Windows PowerShell used the .NET Framework runtime to host the PowerShell engine. これは、Windows PowerShell が .NET Framework によって提供される API セットを公開することを意味します。This means that Windows PowerShell exposes the API set offered by .NET Framework.

.NET Core と .NET Framework の間で共有される API は、.NET Standard の一部として定義されています。The APIs shared between .NET Core and .NET Framework are defined as part of .NET Standard.

PowerShell Core と Windows PowerShell の間のモジュール/スクリプトの互換性に与える影響の詳細については、Windows PowerShell との後方互換性For more information on how this affects module/script compatibility between PowerShell Core and Windows PowerShell, see Backwards compatibility with Windows PowerShell.

macOS と Linux のサポートSupport for macOS and Linux

PowerShell では、次のように、macOS と Linux が正式にサポートされるようになりました。PowerShell now officially supports macOS and Linux, including:

  • Windows 7、8.1、10Windows 7, 8.1, and 10
  • Windows Server 2008 R2、2012 R2、2016Windows Server 2008 R2, 2012 R2, 2016
  • Windows Server 半期チャネルWindows Server Semi-Annual Channel
  • Ubuntu 14.04、16.04、17.04Ubuntu 14.04, 16.04, and 17.04
  • Debian 8.7 以降および 9Debian 8.7+, and 9
  • CentOS 7CentOS 7
  • Red Hat Enterprise Linux 7Red Hat Enterprise Linux 7
  • OpenSUSE 42.2OpenSUSE 42.2
  • Fedora 25、26Fedora 25, 26
  • macOS 10.12 以降macOS 10.12+

弊社のコミュニティでは、次のプラットフォーム用のパッケージも提供していますが、正式にはサポートされていません。Our community has also contributed packages for the following platforms, but they are not officially supported:

  • Arch LinuxArch Linux
  • Kali LinuxKali Linux
  • AppImage (複数の Linux プラットフォームで機能)AppImage (works on multiple Linux platforms)

また、次のプラットフォーム用の試験的な (サポートされていない) リリースがあります。We also have experimental (unsupported) releases for the following platforms:

  • Windows on ARM32/ARM64Windows on ARM32/ARM64
  • Raspbian (Stretch)Raspbian (Stretch)

Windows 以外のシステムでより適切に機能するように、PowerShell Core 6.0 には多くの変更が行われました。A number of changes were made to in PowerShell Core 6.0 to make it work better on non-Windows systems. これらのいくつかは重大な変更であり、Windows にも影響します。Some of these are breaking changes, which also affect Windows. その他の変更は、PowerShell Core の Windows 以外のインストールにのみ存在するか適用されます。Others are only present or applicable in non-Windows installations of PowerShell Core.

  • Unix プラットフォームでのネイティブ コマンドのグロビング サポートを追加しました。Added support for native command globbing on Unix platforms.
  • more 機能は Linux $PAGER に対応し、既定で less に設定されます。The more functionality respects the Linux $PAGER and defaults to less. これは、ネイティブ バイナリ/コマンドでワイルドカードを使用できるようになったことを意味します (例: ls *.txt)。This means you can now use wildcards with native binaries/commands (for example, ls *.txt). (#3463)(#3463)
  • 末尾の円記号は、ネイティブ コマンド引数を処理するときに自動的にエスケープされます。Trailing backslash is automatically escaped when dealing with native command arguments. (#4965)(#4965)
  • スクリプト エンジンは現在サポートされていないため、Windows 以外のプラットフォームで PowerShell を実行するときは -ExecutionPolicy スイッチを無視します。Ignore the -ExecutionPolicy switch when running PowerShell on non-Windows platforms because script signing is not currently supported. (#3481)(#3481)
  • Unix プラットフォームで NoEcho を受け入れるために ConsoleHost を修正しました。Fixed ConsoleHost to honor NoEcho on Unix platforms. (#3801)(#3801)
  • Unix プラットフォームで大文字と小文字を区別しないパターン マッチングをサポートするために Get-Help を修正しました。Fixed Get-Help to support case insensitive pattern matching on Unix platforms. (#3852)(#3852)
  • パッケージに powershell man ページが追加されました。powershell man-page added to package

ログLogging

macOS では、PowerShell はネイティブ os_log API を使用して、Apple の統合ログシステムにログを記録します。On macOS, PowerShell uses the native os_log APIs to log to Apple's unified logging system. Linux では、PowerShell は、ユビキタス ログ ソリューションである Syslog を使用します。On Linux, PowerShell uses Syslog, a ubiquitous logging solution.

ファイル システムFilesystem

従来、Windows ではサポートされていなかったファイル名の文字をサポートするために、macOS と Linux について多くの変更が行われました。A number of changes have been made on macOS and Linux to support filename characters not traditionally supported on Windows:

  • コマンドレットに指定されるパスがスラッシュに依存しなくなりました (/ と \ の両方がディレクトリの区切り記号として機能)。Paths given to cmdlets are now slash-agnostic (both / and \ work as directory separator)
  • XDG Base Directory Specification に準拠するようになり、既定では次のように使用されます。XDG Base Directory Specification is now respected and used by default:
    • Linux/macOS プロファイルのパスは ~/.config/powershell/profile.ps1 にあります。The Linux/macOS profile path is located at ~/.config/powershell/profile.ps1
    • 履歴保存パスは ~/.local/share/powershell/PSReadline/ConsoleHost_history.txt にあります。The history save path is located at ~/.local/share/powershell/PSReadline/ConsoleHost_history.txt
    • ユーザー モジュール パスは ~/.local/share/powershell/Modules にあります。The user module path is located at ~/.local/share/powershell/Modules
  • Unix では、コロン文字を含むファイルとフォルダーの名前がサポートされます。Support for file and folder names containing the colon character on Unix. (#4959)(#4959)
  • コンマを含むスクリプトの名前または完全パスがサポートされます。Support for script names or full paths that have commas. (#4136) (@TimCurwick に感謝)(#4136) (Thanks to @TimCurwick!)
  • ナビゲーション コマンドレットのワイルドカードの展開を抑制するために -LiteralPath が使用されるタイミングを検出します。Detect when -LiteralPath is used to suppress wildcard expansion for navigation cmdlets. (#5038)(#5038)
  • *nix ls -R や Windows の DIR /S ネイティブ コマンドのように動作するよう Get-ChildItem を更新しました。Updated Get-ChildItem to work more like the *nix ls -R and the Windows DIR /S native commands. Get-ChildItem では、再帰的検索時に発生するシンボリック リンクを返し、これらのリンク先のディレクトリは検索しなくなりました。Get-ChildItem now returns the symbolic links encountered during a recursive search and does not search the directories that those links target. (#3780)(#3780)

大文字と小文字の区別Case sensitivity

Linux と macOS では大文字と小文字を区別する傾向があります。一方、Windows では大文字と小文字は区別されませんが、大文字と小文字は保持されます。Linux and macOS tend to be case-sensitive while Windows is case-insensitive while preserving case. 一般に、PowerShell では大文字と小文字が区別されません。In general, PowerShell is case insensitive.

たとえば、macOS と Linux では環境変数の大文字と小文字が区別されるため、PSModulePath 環境変数の大文字と小文字の区別が標準化されています。For example, environment variables are case-sensitive on macOS and Linux, so the casing of the PSModulePath environment variable has been standardized. (#3255) モジュールの名前を判別するためにファイル パスを使用する場合は、Import-Module の大文字と小文字が区別されません。(#3255) Import-Module is case insensitive when it's using a file path to determine the module's name. (#5097)(#5097)

サイド バイ サイド インストールのサポートSupport for side-by-side installations

PowerShell Core は、Windows PowerShell とは別にインストール、構成、実行されます。PowerShell Core is installed, configured, and executed separately from Windows PowerShell. PowerShell Core には "ポータブル" ZIP パッケージがあります。PowerShell Core has a "portable" ZIP package. ZIP パッケージを使用して、PowerShell を依存関係と見なすアプリケーションに対して局所的なものを含む、ディスクの任意の位置に任意の数のバージョンをインストールすることができます。Using the ZIP package, you can install any number of versions anywhere on disk, including local to an application that takes PowerShell as a dependency. サイド バイ サイド インストールでは、新しいバージョンの PowerShell のテストと既存のスクリプトの段階的な移行がより容易になります。Side-by-side installation makes it easier to test new versions of PowerShell and migrating existing scripts over time. また、サイド バイ サイドでは、スクリプトを必要な特定のバージョンにピン留めできるため、後方互換性が有効になります。Side-by-side also enables backwards compatibility as scripts can be pinned to specific versions that they require.

注意

既定では、Windows 上の MSI ベースのインストーラーはインプレース更新インストールを行います。By default, the MSI-based installer on Windows does an in-place update install.

powershell(.exe) から pwsh(.exe) への名前変更Renamed powershell(.exe) to pwsh(.exe)

PowerShell Core のバイナリ名が powershell(.exe) から pwsh(.exe) に変更されました。The binary name for PowerShell Core has been changed from powershell(.exe) to pwsh(.exe). この変更により、Windows PowerShell と PowerShell Core のサイド バイ サイドのインストールをサポートするために、ユーザーがコンピューター上で PowerShell Core を実行する場合に決定的な方法が提供されます。This change provides a deterministic way for users to run PowerShell Core on machines to support side-by-side Windows PowerShell and PowerShell Core installations. また、pwsh は短いため、入力しやすくなります。pwsh is also much shorter and easier to type.

powershell.exe から pwsh(.exe) への変更以外の変更点は次のとおりです。Additional changes to pwsh(.exe) from powershell.exe:

  • 最初の位置指定パラメーターが -Command から -File に変更されました。Changed the first positional parameter from -Command to -File. この変更により、Windows 以外のプラットフォームの PowerShell 以外のシェルから実行されている PowerShell スクリプトの #! (シバンともいう) 使用方法が修正されます。This change fixes the usage of #! (aka as a shebang) in PowerShell scripts that are being executed from non-PowerShell shells on non-Windows platforms. これは、-File を指定せずに pwsh foo.ps1 または pwsh fooScript のようなコマンドを実行できることも意味します。It also means that you can run commands like pwsh foo.ps1 or pwsh fooScript without specifying -File. ただし、この変更では、pwsh.exe -Command Get-Command などのコマンドの実行を試みる場合に -c または -Command を明示的に指定する必要があります。However, this change requires that you explicitly specify -c or -Command when trying to run commands like pwsh.exe -Command Get-Command. (#4019)(#4019)
  • PowerShell Core は -i (または -Interactive) スイッチを受け入れ、対話型シェルを示します。PowerShell Core accepts the -i (or -Interactive) switch to indicate an interactive shell. (# 3558) これにより、Unix プラットフォームで既定のシェルとして PowerShell を使用できるようになります。(#3558) This allows PowerShell to be used as a default shell on Unix platforms.
  • パラメーターの -importsystemmodules-psconsoleFilepwsh.exe から削除しました。Removed parameters -importsystemmodules and -psconsoleFile from pwsh.exe. (#4995)(#4995)
  • 他のネイティブ ツールに合わせて pwsh -versionpwsh.exe の組み込みヘルプを変更しました。Changed pwsh -version and built-in help for pwsh.exe to align with other native tools. (#4958 および #4931) (@iSazonov に感謝)(#4958 & #4931) (Thanks @iSazonov)
  • -File-Command の無効な引数エラー メッセージと終了コードの Unix 標準への準拠 (#4573)Invalid argument error messages for -File and -Command and exit codes consistent with Unix standards (#4573)
  • Windows の -WindowStyle パラメーターを追加しました。Added -WindowStyle parameter on Windows. (#4573) 同様に、Windows 以外のプラットフォームのパッケージ ベースのインストール更新はインプレース更新となります。(#4573) Similarly, package-based installations updates on non-Windows platforms are in-place updates.

Windows PowerShell との後方互換性Backwards compatibility with Windows PowerShell

PowerShell Core の目的は、Windows PowerShell との互換性をできる限り維持することです。The goal of PowerShell Core is to remain as compatible as possible with Windows PowerShell. PowerShell Core では .NET Standard 2.0 を使用して、既存の .NET アセンブリとのバイナリの互換性を提供します。PowerShell Core uses .NET Standard 2.0 to provide binary compatibility with existing .NET assemblies. 多くの PowerShell モジュールはこれらのアセンブリ (多くの場合、Dll) に依存するため、.NET Standard では .NET Core を引き続き使用できます。Many PowerShell modules depend on these assemblies (often times DLLs), so .NET Standard allows them to continue working with .NET Core. PowerShell Core には、.NET Framework DLL の依存関係を検索するための既知のフォルダー (通常、ディスク上のグローバル アセンブリ キャッシュが存在する場所など) を調べるヒューリスティックも含まれます。PowerShell Core also includes a heuristic to look in well-known folders--like where the Global Assembly Cache typically resides on disk--to find .NET Framework DLL dependencies.

.NET Standard の詳細については、.NET ブログ、この YouTube ビデオ、および GitHub のこの FAQ を参照してください。You can learn more about .NET Standard on the .NET Blog, in this YouTube video, and via this FAQ on GitHub.

PowerShell 言語と "組み込み" モジュール (Microsoft.PowerShell.ManagementMicrosoft.PowerShell.Utility など) が Windows PowerShell の場合と同じように機能するように最善を尽くしました。Best efforts have been made to ensure that the PowerShell language and "built-in" modules (like Microsoft.PowerShell.Management, Microsoft.PowerShell.Utility, etc.) work the same as they do in Windows PowerShell. 多くの場合、コミュニティを利用して、これらのコマンドレットに新しい機能とバグの修正が追加されています。In many cases, with the help of the community, we've added new capabilities and bug fixes to those cmdlets. 場合によっては、基になる .NET レイヤーとの依存関係がないため、機能が削除されているか、使用できなくなっています。In some cases, due to a missing dependency in underlying .NET layers, functionality was removed or is unavailable.

Windows の一部として出荷されるモジュールのほとんど (DnsClientHyper-VNetTCPIPStorage など) と、Azure と Office を含むその他の Microsoft 製品はまだ .NET Core には明示的に移植されていません。Most of the modules that ship as part of Windows (for example, DnsClient, Hyper-V, NetTCPIP, Storage, etc.) and other Microsoft products including Azure and Office have not been explicitly ported to .NET Core yet. PowerShell チームはこれらの製品グループとチームと協力して既存のモジュールを検証し、PowerShell Core に移植しています。The PowerShell team is working with these product groups and teams to validate and port their existing modules to PowerShell Core. .NET Standard と CDXML を使用すると、これらの従来の Windows PowerShell モジュールの多くが PowerShell Core で機能するようですが、正式には検証されておらず、また、正式にサポートされていません。With .NET Standard and CDXML, many of these traditional Windows PowerShell modules do seem to work in PowerShell Core, but they have not been formally validated, and they are not formally supported.

WindowsPSModulePath モジュールをインストールして、Windows PowerShell PSModulePath をご利用の PowerShell Core PSModulePath に追加することで、Windows PowerShell モジュールを使用できます。By installing the WindowsPSModulePath module, you can use Windows PowerShell modules by appending the Windows PowerShell PSModulePath to your PowerShell Core PSModulePath.

最初に、PowerShell ギャラリーから WindowsPSModulePath モジュールをインストールします。First, install the WindowsPSModulePath module from the PowerShell Gallery:

# Add `-Scope CurrentUser` if you're installing as non-admin
Install-Module WindowsPSModulePath -Force

このモジュールをインストールしたら、次のように Add-WindowsPSModulePath コマンドレットを実行して、Windows PowerShell PSModulePath を PowerShell Core に追加します。After installing this module, run the Add-WindowsPSModulePath cmdlet to add the Windows PowerShell PSModulePath to PowerShell Core:

# Add this line to your profile if you always want Windows PowerShell PSModulePath
Add-WindowsPSModulePath

Docker サポートDocker support

PowerShell Core には、弊社がサポートする主なすべてのプラットフォーム (複数の Linux ディストリビューション、Windows Server Core、Nano Server を含む) 用の Docker コンテナーのサポートが追加されています。PowerShell Core adds support for Docker containers for all the major platforms we support (including multiple Linux distros, Windows Server Core, and Nano Server).

完全なリストについては、Docker Hub の microsoft/powershell のタグを確認してください。For a complete list, check out the tags on microsoft/powershell on Docker Hub. Docker と PowerShell Core の詳細については、GitHub の「Docker」を参照してください。For more information on Docker and PowerShell Core, see Docker on GitHub.

SSH ベースの PowerShell リモート処理SSH-based PowerShell Remoting

PowerShell リモート処理プロトコル (PSRP) が、従来の WinRM ベースの PSRP に加えて、SSH (Secure Shell) プロトコルでも機能するようになりました。The PowerShell Remoting Protocol (PSRP) now works with the Secure Shell (SSH) protocol in addition to the traditional WinRM-based PSRP.

これは、Enter-PSSessionNew-PSSession などのコマンドレットを使用し、SSH を使用して認証できることを意味します。This means that you can use cmdlets like Enter-PSSession and New-PSSession and authenticate using SSH. OpenSSH ベースの SSH サーバーにサブシステムとして PowerShell を登録するだけで、従来の PSSession セマンティクスで既存の SSH ベースの認証メカニズム (パスワードや秘密キーなど) を使用できます。All you have to do is register PowerShell as a subsystem with an OpenSSH-based SSH server, and you can use your existing SSH-based authenticate mechanisms (like passwords or private keys) with the traditional PSSession semantics.

SSH ベースのリモート処理の構成と使用の詳細については、「SSH 経由の PowerShell リモート処理」を参照してください。For more information on configuring and using SSH-based remoting, see PowerShell Remoting over SSH.

New-ModuleManifest を除き、既定のエンコードは BOM なしの UTF-8 ですDefault encoding is UTF-8 without a BOM except for New-ModuleManifest

これまでは、Get-ContentSet-Content のような Windows PowerShell コマンドレットでは、ASCII や UTF-16 などの異なるエンコードを使用していました。In the past, Windows PowerShell cmdlets like Get-Content, Set-Content used different encodings, such as ASCII and UTF-16. エンコードを指定せずにコマンドレットを混在させると、エンコード既定値の変数により問題が生じていました。The variance in encoding defaults created problems when mixing cmdlets without specifying an encoding.

従来、Windows 以外のプラットフォームでは、テキスト ファイルの既定のエンコードとして BOM (バイト オーダー マーク) なしで UTF-8 を使用します。Non-Windows platforms traditionally use UTF-8 without a Byte Order Mark (BOM) as the default encoding for text files. より多くの Windows アプリケーションとツールが UTF-16 から BOM なしの UTF-8 エンコードに移行しつつあります。More Windows applications and tools are moving away from UTF-16 and towards BOM-less UTF-8 encoding. PowerShell Core では、より広範囲のエコシステムに準拠するために既定のエンコードが変更されています。PowerShell Core changes the default encoding to conform with the broader ecosystems.

つまり、-Encoding パラメーターを使用するすべての組み込みコマンドレットでは、既定で UTF8NoBOM 値が使用されます。This means that all built-in cmdlets that use the -Encoding parameter use the UTF8NoBOM value by default. 以下のコマンドレットがこの変更の影響を受けます。The following cmdlets are affected by this change:

  • Add-ContentAdd-Content
  • Export-ClixmlExport-Clixml
  • Export-CsvExport-Csv
  • Export-PSSessionExport-PSSession
  • Format-HexFormat-Hex
  • Get-ContentGet-Content
  • Import-CsvImport-Csv
  • Out-FileOut-File
  • Select-StringSelect-String
  • Send-MailMessageSend-MailMessage
  • Set-ContentSet-Content

これらのコマンドレットも更新され、-Encoding パラメーターで System.Text.Encoding が一般に受け入れられるようになりました。These cmdlets have also been updated so that the -Encoding parameter universally accepts System.Text.Encoding.

$OutputEncoding の既定値も UTF-8 に変更されました。The default value of $OutputEncoding has also been changed to UTF-8.

ベスト プラクティスとして、-Encoding パラメーターを使用してスクリプトに明示的にエンコードを設定し、プラットフォーム間の動作が決定的なものになるようにする必要があります。As a best practice, you should explicitly set encodings in scripts using the -Encoding parameter to produce deterministic behavior across platforms.

New-ModuleManifest コマンドレットには Encoding パラメーターがありません。New-ModuleManifest cmdlet does not have Encoding parameter. New-ModuleManifest コマンドレットで作成されたモジュール マニフェスト (.psd1) ファイルのエンコーディングは、環境によって異なります。Linux で動作する PowerShell Core の場合、エンコーディングは UTF-8 (BOM なし) です。それ以外の場合、エンコーディングは UTF-16 (BOM あり) です。The encoding of the module manifest (.psd1) file created with New-ModuleManifest cmdlet depends on environment: if it is PowerShell Core running on Linux then encoding is UTF-8 (no BOM); otherwise encoding is UTF-16 (with BOM). (#3940)(#3940)

アンパサンド (&) を使用するパイプラインのバックグラウンドでの実行サポート (#3360)Support backgrounding of pipelines with ampersand (&) (#3360)

パイプラインの最後に & を配置すると、パイプラインが PowerShell ジョブとして実行されます。Putting & at the end of a pipeline causes the pipeline to be run as a PowerShell job. パイプラインをバックグラウンドで実行すると、ジョブ オブジェクトが返されます。When a pipeline is backgrounded, a job object is returned. パイプラインがジョブとして実行されている場合は、標準の *-Job コマンドレットをすべてジョブの管理のために使用できます。Once the pipeline is running as a job, all of the standard *-Job cmdlets can be used to manage the job. パイプラインで使用される変数 (プロセス固有の変数は無視) は、Copy-Item $foo $bar & のみが機能するようにジョブに自動的にコピーされます。Variables (ignoring process-specific variables) used in the pipeline are automatically copied to the job so Copy-Item $foo $bar & just works. また、ジョブは、ユーザーのホーム ディレクトリではなく、現在のディレクトリで実行されます。The job is also run in the current directory instead of the user's home directory. PowerShell ジョブの詳細については、「about_Jobs」を参照してください。For more information about PowerShell jobs, see about_Jobs.

セマンティック バージョニングSemantic versioning

  • SemanticVersionSemVer 2.0 との互換性を持たせました。Made SemanticVersion compatible with SemVer 2.0. (#5037) (@iSazonov に感謝)(#5037) (Thanks @iSazonov!)
  • SemVer に合わせて New-ModuleManifest の既定の ModuleVersion0.0.1 に変更しました。Changed default ModuleVersion in New-ModuleManifest to 0.0.1 to align with SemVer. (#4842) (@LDSpits に感謝)(#4842) (Thanks @LDSpits)
  • System.Management.Automation.SemanticVersion の型のアクセラレータとして semver を追加しました。Added semver as a type accelerator for System.Management.Automation.SemanticVersion. (#4142) (@oising に感謝)(#4142) (Thanks to @oising!)
  • SemanticVersion インスタンスと、MajorMinor のバージョン値のみで構築される Version インスタンスを比較できるようになりました。Enabled comparison between a SemanticVersion instance and a Version instance that is constructed only with Major and Minor version values.

言語の更新Language updates

  • ユーザーが Unicode 文字を引数、文字列、または変数名として使用できるように、Unicode エスケープ解析を実装します。Implement Unicode escape parsing so that users can use Unicode characters as arguments, strings, or variable names. (#3958) (@rkeithhill に感謝)(#3958) (Thanks to @rkeithhill!)
  • ESC の新しいエスケープ文字 (`e) を追加しました。Added new escape character for ESC: `e
  • 列挙型を文字列に変換するサポートを追加しました。(#4318) (@KirkMunro に感謝)Added support for converting enums to string (#4318) (Thanks @KirkMunro)
  • ジェネリック コレクションへの単一の要素配列のキャストを修正しました。Fixed casting single element array to a generic collection. (#3170)(#3170)
  • 'a'..'z' が 'a' から 'z' までの文字を返すように、.. 演算子に文字範囲のオーバーロードを追加しました。Added character range overload to the .. operator, so 'a'..'z' returns characters from 'a' to 'z'. (#5026) (@IISResetMe に感謝)(#5026) (Thanks @IISResetMe!)
  • 読み取り専用の変数を上書きしないように変数代入を修正しました。Fixed variable assignment to not overwrite read-only variables
  • スクリプト コマンドレットをドットで表す場合に、'DottedScopes' に自動変数のローカルをプッシュします。(#4709)Push locals of automatic variables to 'DottedScopes' when dotting script cmdlets (#4709)
  • 分割演算子で 'Singleline, Multiline' オプションを使用できるようにします。(#4721) (@iSazonov に感謝)Enable use of 'Singleline, Multiline' option in split operator (#4721) (Thanks @iSazonov)

エンジンの更新Engine updates

  • $PSVersionTable には、次の 4 つの新しいプロパティがあります。$PSVersionTable has four new properties:
    • PSEdition: これは、PowerShell Core では Core に、Windows PowerShell では Desktop に設定されます。PSEdition: This is set to Core on PowerShell Core and Desktop on Windows PowerShell
    • GitCommitId: これは、PowerShell が構築された Git ブランチまたはタグの Git コミット ID です。GitCommitId: This is the Git commit ID of the Git branch or tag where PowerShell was built. リリースされたビルドでは、PSVersion と同じになる可能性があります。On released builds, it will likely be the same as PSVersion.
    • OS: これは、[System.Runtime.InteropServices.RuntimeInformation]::OSDescription によって返される OS バージョンの文字列です。OS: This is an OS version string returned by [System.Runtime.InteropServices.RuntimeInformation]::OSDescription
    • Platform: これは [System.Environment]::OSVersion.Platform によって返されます。Windows では Win32NT に、macOs では Unix に、Linux では Unix に設定されます。Platform: This is returned by [System.Environment]::OSVersion.Platform It is set to Win32NT on Windows, Unix on macOS, and Unix on Linux.
  • $PSVersionTable から BuildVersion プロパティを削除しました。Removed the BuildVersion property from $PSVersionTable. このプロパティは、Windows のビルド バージョンに強く関連付けられていました。This property was strongly tied to the Windows build version. 代わりに、GitCommitId を使用して、PowerShell Core の正確なビルド バージョンを取得することをお勧めします。Instead, we recommend that you use GitCommitId to retrieve the exact build version of PowerShell Core. (#3877) (@iSazonov に感謝)(#3877) (Thanks to @iSazonov!)
  • $PSVersionTable から ClrVersion プロパティを削除しました。Remove ClrVersion property from $PSVersionTable. このプロパティは .NET Core には適しておらず、PowerShell に適用できない特定のレガシー用にのみ .NET Core で保持されました。This property is irrelevant for .NET Core, and was only preserved in .NET Core for specific legacy purposes that are inapplicable to PowerShell.
  • PowerShell が特定の OS で実行されているかどうかを判断するために、新しく 3 つの自動変数 ($IsWindows$IsMacOs$IsLinux) を追加しました。Added three new automatic variables to determine whether PowerShell is running in a given OS: $IsWindows, $IsMacOs, and $IsLinux.
  • PowerShell Core のバナーに GitCommitId を追加します。Add GitCommitId to PowerShell Core banner. バージョンを取得するために PowerShell を起動してすぐに $PSVersionTable を実行する必要がなくなりました。Now you don't have to run $PSVersionTable as soon as you start PowerShell to get the version! (#3916) (@iSazonov に感謝)(#3916) (Thanks to @iSazonov!)
  • 起動前に必要ないくつかの設定 (ExecutionPolicy など) を格納するために、$PSHomepowershell.config.json という JSON 構成ファイルを追加します。Add a JSON config file called powershell.config.json in $PSHome to store some settings required before startup time (e.g. ExecutionPolicy).
  • Windows EXE の実行中はパイプラインをブロックしません。Don't block pipeline when running Windows EXE's
  • COM コレクションの列挙が有効になりました。Enabled enumeration of COM collections. (#4553)(#4553)

コマンドレットの更新Cmdlet updates

新しいコマンドレットNew cmdlets

  • Get-UptimeMicrosoft.PowerShell.Utility に追加します。Add Get-Uptime to Microsoft.PowerShell.Utility.
  • Remove-Alias コマンドを追加します。Add Remove-Alias Command. (#5143) (@PowershellNinja に感謝)(#5143) (Thanks @PowershellNinja!)
  • Remove-Service を管理モジュールに追加します。Add Remove-Service to Management module. (#4858) (@joandrsn に感謝)(#4858) (Thanks @joandrsn!)

Web コマンドレットWeb cmdlets

  • Web コマンドレットの証明書認証サポートを追加します。Add certificate authentication support for web cmdlets. (#4646) (@markekraus に感謝)(#4646) (Thanks @markekraus)
  • Web コマンドレットにコンテンツ ヘッダーのサポートを追加します。Add support for content headers to web cmdlets. (#4494 および #4640) (@markekraus に感謝)(#4494 & #4640) (Thanks @markekraus)
  • Web コマンドレットに複数のリンク ヘッダー サポートを追加します。Add multiple link header support to Web Cmdlets. (#5265) (@markekraus に感謝)(#5265) (Thanks @markekraus!)
  • Web コマンドレットでのリンク ヘッダーの改ページのサポート (#3828)Support Link header pagination in web cmdlets (#3828)
    • Invoke-WebRequest では、応答にリンク ヘッダーが含まれている場合、URL と rel 属性を表す Dictionary として RelationLink プロパティを作成し、開発者が使いやすいように URL を絶対 URL にします。For Invoke-WebRequest, when the response includes a Link header we create a RelationLink property as a Dictionary representing the URLs and rel attributes and ensure the URLs are absolute to make it easier for the developer to use.
    • Invoke-RestMethod では、応答に Link ヘッダーが含まれている場合、-FollowRelLink スイッチを公開し、存在しなくなるか、省略可能な -MaximumFollowRelLink パラメーター値にヒットするまで、next rel リンクに自動的に従うようにします。For Invoke-RestMethod, when the response includes a Link header we expose a -FollowRelLink switch to automatically follow next rel links until they no longer exist or once we hit the optional -MaximumFollowRelLink parameter value.
  • 標準以外のメソッドの動詞で使用できるように、Web コマンドレットに -CustomMethod パラメーターを追加します。Add -CustomMethod parameter to web cmdlets to allow for non-standard method verbs. (#3142) (@Lee303 に感謝)(#3142) (Thanks to @Lee303!)
  • Web コマンドレットに SslProtocol サポートを追加します。Add SslProtocol support to Web Cmdlets. (#5329) (@markekraus に感謝)(#5329) (Thanks @markekraus!)
  • Web コマンドレットにマルチパートのサポートを追加します。Add Multipart support to web cmdlets. (#4782) (@markekraus に感謝)(#4782) (Thanks @markekraus)
  • システム全体のプロキシ設定が無視されるように、Web コマンドレットに -NoProxy を追加します。Add -NoProxy to web cmdlets so that they ignore the system-wide proxy setting. (#3447) (@TheFlyingCorpse に感謝)(#3447) (Thanks to @TheFlyingCorpse!)
  • Web コマンドレットのユーザー エージェントで OS プラットフォームがレポートされるようになりました。(#4937) (@LDSpits に感謝)User Agent of Web Cmdlets now reports the OS platform (#4937) (Thanks @LDSpits)
  • ヘッダー値を検証せずにヘッダーを追加できるように、Web コマンドレットに -SkipHeaderValidation スイッチを追加します。Add -SkipHeaderValidation switch to web cmdlets to support adding headers without validating the header value. (#4085)(#4085)
  • 必要に応じて、Web コマンドレットでサーバーの HTTPS 証明書を検証しないようにすることができます。Enable web cmdlets to not validate the HTTPS certificate of the server if required.
  • Web コマンドレットに認証パラメーターを追加します。Add authentication parameters to web cmdlets. (#5052) (@markekraus に感謝)(#5052) (Thanks @markekraus)
    • 3 つのオプション (Basic、OAuth、Bearer) を提供する -Authentication を追加します。Add -Authentication that provides three options: Basic, OAuth, and Bearer.
    • OAuth および Bearer オプションのベアラー トークンを取得するために、-Token を追加します。Add -Token to get the bearer token for OAuth and Bearer options.
    • HTTPS ではなく、任意のトランスポート スキームに対して指定される認証をバイパスするために、-AllowUnencryptedAuthentication を追加します。Add -AllowUnencryptedAuthentication to bypass authentication that is provided for any transport scheme other than HTTPS.
  • 応答ヘッダーのキャプチャを有効にするために、Invoke-RestMethod-ResponseHeadersVariable を追加します。Add -ResponseHeadersVariable to Invoke-RestMethod to enable the capture of response headers. (#4888) (@markekraus に感謝)(#4888) (Thanks @markekraus)
  • 応答ステータス コードが成功でない場合は例外に HTTP 応答を含めるように、Web コマンドレットを修正します。Fix web cmdlets to include the HTTP response in the exception when the response status code is not success. (#3201)(#3201)
  • Web コマンドレットの UserAgentWindowsPowerShell から PowerShell に変更します。Change web cmdlets UserAgent from WindowsPowerShell to PowerShell. (#4914) (@markekraus に感謝)(#4914) (Thanks @markekraus)
  • 明示的な ContentType 検出を Invoke-RestMethod に追加します。(#4692)Add explicit ContentType detection to Invoke-RestMethod (#4692)
  • 標準以外の User-Agent ヘッダーを扱うために、Web コマンドレットの -SkipHeaderValidation を修正します。Fix web cmdlets -SkipHeaderValidation to work with non-standard User-Agent headers. (#4479 および #4512) (@markekraus に感謝)(#4479 & #4512) (Thanks @markekraus)

JSON コマンドレットJSON cmdlets

  • 代わりに Hashtable を返すように ConvertFrom-Json-AsHashtable を追加します。Add -AsHashtable to ConvertFrom-Json to return a Hashtable instead. (#5043) (@bergmeister に感謝)(#5043) (Thanks @bergmeister!)
  • ConvertTo-Json 出力でよりわかりやすいフォーマッタを使用します。Use prettier formatter with ConvertTo-Json output. (#2787) (@kittholland に感謝)(#2787) (Thanks to @kittholland!)
  • ConvertTo-JsonJobject のシリアル化サポートを追加します。Add Jobject serialization support to ConvertTo-Json. (#5141)(#5141)
  • 完全な JSON 文字列を一緒に構築する、パイプラインからの文字列配列の逆シリアル化を行うために ConvertFrom-Json を修正します。Fix ConvertFrom-Json to deserialize an array of strings from the pipeline that together construct a complete JSON string. この修正により、改行で JSON 解析が中断される場合があります。This fixes some cases where newlines would break JSON parsing. (#3823)(#3823)
  • System.Array に定義されている AliasProperty "Count" を削除します。Remove the AliasProperty "Count" defined for System.Array. これにより、いくつかの ConvertFrom-Json の出力で無関係な Count プロパティが削除されます。This removes the extraneous Count property on some ConvertFrom-Json output. (#3231) (@PetSerAl に感謝)(#3231) (Thanks to @PetSerAl!)

CSV のコマンドレットCSV cmdlets

  • Import-CsvConvertFrom-CsvPSTypeName サポートを追加します。Add PSTypeName Support for Import-Csv and ConvertFrom-Csv. (#5389) (@markekraus に感謝)(#5389) (Thanks @markekraus!)
  • Import-Csv で行区切り文字として CRLFCRLF を使用できるようにします。Make Import-Csv support CR, LF, and CRLF as line delimiters. (#5363) (@iSazonov に感謝)(#5363) (Thanks @iSazonov!)
  • Export-CsvConvertTo-Csv-NoTypeInformation を既定値にします。Make -NoTypeInformation the default on Export-Csv and ConvertTo-Csv. (#5164) (@markekraus に感謝)(#5164) (Thanks @markekraus)

サービスのコマンドレットService cmdlets

  • Get-Service によって返される ServiceController オブジェクトに UserNameDescriptionDelayedAutoStartBinaryPathNameStartupType プロパティを追加します。Add properties UserName, Description, DelayedAutoStart, BinaryPathName, and StartupType to the ServiceController objects returned by Get-Service. (#4907) (@joandrsn に感謝)(#4907) (Thanks @joandrsn)
  • Set-Service コマンドで資格情報を設定するための機能を追加します。Add functionality to set credentials on Set-Service command. (#4844) (@joandrsn に感謝)(#4844) (Thanks @joandrsn)

その他のコマンドレットOther cmdlets

  • リンク ループを確認し、必要に応じて symlink をトラバースする -FollowSymlink という Get-ChildItem にパラメーターを追加します。Add a parameter to Get-ChildItem called -FollowSymlink that traverses symlinks on demand, with checks for link loops. (#4020)(#4020)
  • CSharpVersion7 をサポートするために Add-Type を更新します。Update Add-Type to support CSharpVersion7. (#3933) (@iSazonov に感謝)(#3933) (Thanks to @iSazonov)
  • より優れたソリューションが見つかるまでサポートされていない API を使用するため、Microsoft.PowerShell.LocalAccounts モジュールを削除します。Remove the Microsoft.PowerShell.LocalAccounts module due to the use of unsupported APIs until a better solution is found. (#4302)(#4302)
  • より優れたソリューションが見つかるまでサポートされていない API を使用するため、Microsoft.PowerShell.Diagnostics*-Counter コマンドレットを削除します。Remove the *-Counter cmdlets in Microsoft.PowerShell.Diagnostics due to the use of unsupported APIs until a better solution is found. (#4303)(#4303)
  • Invoke-Item -Path <folder> のサポートを追加します。Add support for Invoke-Item -Path <folder>. (#4262)(#4262)
  • ファイル名拡張子とファイル名の残りの部分の間のパスを分割できるように、Split-Path-Extension および -LeafBase スイッチを追加します。Add -Extension and -LeafBase switches to Split-Path so that you can split paths between the filename extension and the rest of the filename. (#2721) (@powercode に感謝)(#2721) (Thanks to @powercode!)
  • Top/Bottom N Sort のために Sort-Object にパラメーターの -Top-Bottom を追加します。Add parameters -Top and -Bottom to Sort-Object for Top/Bottom N sort
  • CodeProperty "Parent"System.Diagnostics.Process に追加して、プロセスの親プロセスを公開します。Expose a process' parent process by adding the CodeProperty "Parent" to System.Diagnostics.Process. (#2850) (@powercode に感謝)(#2850) (Thanks to @powercode!)
  • Get-Process のメモリ列で、KB ではなく MB を使用します。Use MB instead of KB for memory columns of Get-Process
  • Out-String-NoNewLine スイッチを追加します。Add -NoNewLine switch for Out-String. (#5056) (@raghav710 に感謝)(#5056) (Thanks @raghav710)
  • Move-Item コマンドレットで -Include-Exclude-Filter のパラメーターを受け入れます。Move-Item cmdlet honors -Include, -Exclude, and -Filter parameters. (#3878)(#3878)
  • Remove-Item のレジストリ パスで * を使用できるようにします。Allow * to be used in registry path for Remove-Item. (#4866)(#4866)
  • -TitleGet-Credential に追加して、プラットフォーム間のプロンプト エクスペリエンスを統合します。Add -Title to Get-Credential and unify the prompt experience across platforms.
  • -TimeOut パラメーターを Test-Connection に追加します。Add the -TimeOut parameter to Test-Connection. (#2492)(#2492)
  • Get-AuthenticodeSignature コマンドレットで、ファイルの署名タイムスタンプを取得できるようになりました。Get-AuthenticodeSignature cmdlets can now get file signature timestamp. (#4061)(#4061)
  • Get-Help からサポートされていない -ShowWindow スイッチを削除します。Remove unsupported -ShowWindow switch from Get-Help. (#4903)(#4903)
  • 返される配列要素に区切り文字が含まれないように Get-Content -Delimiter を修正します。(#3706) (@mklement0 に感謝)Fix Get-Content -Delimiter to not include the delimiter in the array elements returned (#3706) (Thanks @mklement0)
  • MetaCharsetTransitional パラメーターを ConvertTo-HTML に追加します。(#4184) (@ergo3114 に感謝)Add Meta, Charset, and Transitional parameters to ConvertTo-HTML (#4184) (Thanks @ergo3114)
  • Get-ComputerInfo の結果に WindowsUBR および WindowsVersion プロパティを追加します。Add WindowsUBR and WindowsVersion properties to Get-ComputerInfo result
  • -Group パラメーターを Get-Verb に追加します。Add -Group parameter to Get-Verb
  • ShouldProcess のサポートを New-FileCatalogTest-FileCatalog に追加します (-WhatIf-Confirm を修正)。Add ShouldProcess support to New-FileCatalog and Test-FileCatalog (fixes -WhatIf and -Confirm). (#3074) (@iSazonov に感謝)(#3074) (Thanks to @iSazonov!)
  • -WhatIf スイッチを Start-Process コマンドレットに追加します。(#4735) (@sarithsutha に感謝)Add -WhatIf switch to Start-Process cmdlet (#4735) (Thanks @sarithsutha)
  • ValidateNotNullOrEmpty を多くの既存のパラメーターに追加します。Add ValidateNotNullOrEmpty too many existing parameters.

Tab 補完機能Tab completion

  • ランタイム変数の値に基づいて、Tab 補完機能の型推論を改善しました。Enhanced the type inference in tab completion based on runtime variable values. (#2744) (@powercode に感謝)これにより、次のような場合に Tab 補完機能が有効になります。(#2744) (Thanks to @powercode!) This enables tab completion in situations like:

    $p = Get-Process
    $p | Foreach-Object Prio<tab>
    
  • Select-Object-Property にハッシュテーブルの Tab 補完機能を追加します。Add Hashtable tab completion for -Property of Select-Object. (#3625) (@powercode に感謝)(#3625) (Thanks to @powercode)

  • Select-Object-ExcludeProperty-ExpandProperty で引数のオートコンプリートを有効にします。Enable argument auto-completion for -ExcludeProperty and -ExpandProperty of Select-Object. (#3443) (@iSazonov に感謝)(#3443) (Thanks to @iSazonov!)

  • ネイティブ コンプリーターに対する native.exe --<tab> 呼び出しを行うために、Tab 補完機能のバグを修正します。Fix a bug in tab completion to make native.exe --<tab> call into native completer. (#3633) (@powercode に感謝)(#3633) (Thanks to @powercode!)

破壊的変更Breaking changes

PowerShell Core 6.0 には多くの重大な変更が導入されています。We've introduced a number of breaking changes in PowerShell Core 6.0. その詳細については、PowerShell Core 6.0 の重大な変更に関するページを参照してください。To read more about them in detail, see Breaking Changes in PowerShell Core 6.0.

デバッグDebugging

  • Invoke-Command -ComputerName でのリモート ステップイン デバッグをサポートします。Support for remote step-in debugging for Invoke-Command -ComputerName. (#3015)(#3015)
  • PowerShell Core でのバインダー デバッグ ログを有効にします。Enable binder debug logging in PowerShell Core

FileSystem の更新Filesystem updates

  • UNC パスからの FileSystem プロバイダーの使用を有効にします。Enable usage of the Filesystem provider from a UNC path. ($4998)($4998)
  • Split-Path で UNC ルートを使用できるようになりました。Split-Path now works with UNC roots
  • 引数なしの cdcd ~ として動作するようになりました。cd with no arguments now behaves as cd ~
  • 260 文字を超えるパスを使用できるように PowerShell Core を修正しました。Fixed PowerShell Core to allow use of paths that are more than 260 characters long. (#3960)(#3960)

バグの修正とパフォーマンスの改善Bug fixes and performance improvements

起動時刻、さまざまな組み込みコマンドレット、ネイティブ バイナリの操作など、PowerShell 全体のパフォーマンスについて多くの改善を行いました。We've made many improvements to performance across PowerShell, including in startup time, various built-in cmdlets, and interaction with native binaries.

PowerShell Core 内の多くのバグの修正も行いました。We've also fixed a number of bugs within PowerShell Core. 修正と変更の完全なリストについては、GitHub の変更ログに関するページを確認してください。For a complete list of fixes and changes, check out our changelog on GitHub.

テレメトリTelemetry

  • PowerShell Core 6.0 では、次の 2 つの値をレポートするためにコンソール ホストにテレメトリが追加されました。(#3620)PowerShell Core 6.0 added telemetry to the console host to report two values (#3620):
    • OS のプラットフォーム ($PSVersionTable.OSDescription)the OS platform ($PSVersionTable.OSDescription)
    • PowerShell の正確なバージョン ($PSVersionTable.GitCommitId)the exact version of PowerShell ($PSVersionTable.GitCommitId)

このテレメトリをオプトアウトする場合は、単に POWERSHELL_TELEMETRY_OPTOUT 環境変数を作成して値を true1、または yes のいずれかに設定します。If you want to opt-out of this telemetry, simply create POWERSHELL_TELEMETRY_OPTOUT environment variable with one of the following values: true, 1 or yes. この変数を作成すると、PowerShell を初めて実行する前であっても、すべてのテレメトリがバイパスされます。Creating the variable bypasses all telemetry even before the first run of PowerShell. コミュニティ ダッシュボードのテレメトリから収集される、このテレメトリ データと洞察を公開することも予定しています。We also plan on exposing this telemetry data and the insights we glean from the telemetry in the community dashboard. このデータの使用方法の詳細については、こちらのブログの投稿を参照してください。You can find out more about how we use this data in this blog post.