クラウド、オンプレミス、ハイブリッド環境向けに設計された PowerShell 7 には、機能強化と 新機能が満載されています。
- Windows PowerShell を使用してサイド バイ サイドでインストールおよび実行する
- 既存の Windows PowerShell モジュールとの互換性の向上
- 新しい言語機能、例えば三項演算子や
ForEach-Object -Parallel
- パフォーマンスの向上
- SSH ベースのリモート処理
- クロスプラットフォーム相互運用性
- Docker コンテナーのサポート
PowerShell 7 は Windows PowerShell と並行して動作し、デプロイ前にエディション間で簡単にテストおよび比較できます。 移行はシンプルで迅速で安全です。
PowerShell 7 は、次の Windows オペレーティング システムでサポートされています。
- Windows 10、11
- Windows Server 2016、2019、2022
PowerShell 7 は、macOS およびいくつかの Linux ディストリビューションでも実行されます。 サポートされているオペレーティング システムの一覧とサポート ライフサイクルに関する情報については、 PowerShell サポート ライフサイクルを参照してください。
PowerShell 7 のインストール
柔軟性を高め、IT、DevOps エンジニア、開発者のニーズをサポートするために、PowerShell 7 をインストールするためのオプションがいくつかあります。 ほとんどの場合、インストール オプションは次の方法に減らすことができます。
注
MSI パッケージは、 Microsoft Configuration Manager などの管理製品で展開および更新できます。 GitHub リリース ページからパッケージをダウンロードします。
MSI パッケージを展開するには、管理者権限が必要です。 ZIP パッケージは、任意のユーザーが展開できます。 ZIP パッケージは、完全インストールにコミットする前に、テスト用に PowerShell 7 をインストールする最も簡単な方法です。
Windows ストアまたは winget
を使用して PowerShell 7 をインストールすることもできます。 これらの方法の詳細については、「 Windows への PowerShell のインストール」の詳細な手順を参照してください。
PowerShell 7 と Windows PowerShell 5.1 の同時使用
PowerShell 7 は、Windows PowerShell 5.1 と共存するように設計されています。 次の機能により、PowerShell への投資が保護され、PowerShell 7 への移行が簡単になります。
- 個別のインストール パスと実行可能ファイル名
- 個別の PSModulePath
- バージョンごとにプロファイルを分離する
- モジュールの互換性の向上
- 新しいリモート処理エンドポイント
- グループ ポリシーのサポート
- 個別のイベント ログ
.NET バージョンの違い
PowerShell 7.4 は .NET 8.0 上に構築されています。 Windows PowerShell 5.1 は .NET Framework 4.x 上に構築されています。 .NET バージョン間の違いは、特に .NET メソッドを直接呼び出す場合に、スクリプトの動作に影響する可能性があります。 詳細については、「 Windows PowerShell 5.1 と PowerShell 7.x の違い」を参照してください。
個別のインストール パスと実行可能ファイル名
PowerShell 7 が新しいディレクトリにインストールされ、Windows PowerShell 5.1 でサイド バイ サイド実行が可能になります。
バージョン別のインストール場所:
- Windows PowerShell 5.1 の場合:
$Env:windir\System32\WindowsPowerShell\v1.0
- PowerShell 6.x の場合:
$Env:ProgramFiles\PowerShell\6
- PowerShell 7 の場合:
$Env:ProgramFiles\PowerShell\7
新しい場所が PATH に追加され、Windows PowerShell 5.1 と PowerShell 7 の両方を実行できます。 PowerShell 6.x から PowerShell 7 に移行する場合、PowerShell 6 は削除され、PATH は置き換えられます。
Windows PowerShell では、PowerShell の実行可能ファイルには powershell.exe
という名前が付けられます。 バージョン 6 以降では、実行可能ファイルの名前は pwsh.exe
です。 新しい名前を使用すると、両方のバージョンのサイド バイ サイド実行をサポートしやすくなります。
個別の PSModulePath
既定では、Windows PowerShell と PowerShell 7 では異なる場所にモジュールが格納されます。 PowerShell 7 では、これらの場所を組み合わせたものが $Env:PSModulePath
環境変数に設定されます。 名前でモジュールをインポートする場合、PowerShell は、 $Env:PSModulePath
で指定された場所を確認します。 これにより、PowerShell 7 はコア モジュールとデスクトップ モジュールの両方を読み込むことができます。
スコープのインストール | Windows PowerShell 5.1 (英語) | PowerShell 7.0 |
---|---|---|
PowerShell モジュール | $Env:windir\system32\WindowsPowerShell\v1.0\Modules |
$Env:ProgramFiles\PowerShell\7\Modules |
ユーザーインストール済み AllUsers スコープ |
$Env:ProgramFiles\WindowsPowerShell\Modules |
$Env:ProgramFiles\PowerShell\Modules |
ユーザーインストール済み CurrentUser スコープ |
$HOME\Documents\WindowsPowerShell\Modules |
$HOME\Documents\PowerShell\Modules |
次の例は、各バージョンの $Env:PSModulePath
の既定値を示しています。
Windows PowerShell 5.1 の場合:
$Env:PSModulePath -split (';')
C:\Users\<user>\Documents\WindowsPowerShell\Modules C:\Program Files\WindowsPowerShell\Modules C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
PowerShell 7 の場合:
$Env:PSModulePath -split (';')
C:\Users\<user>\Documents\PowerShell\Modules C:\Program Files\PowerShell\Modules C:\Program Files\PowerShell\7\Modules C:\Program Files\WindowsPowerShell\Modules C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
PowerShell 7 には、モジュールの自動読み込みを提供するための Windows PowerShell パスと PowerShell 7 パスが含まれていることに注意してください。
注
PSModulePath 環境変数を変更した場合、またはカスタム モジュールまたはアプリケーションをインストールした場合は、追加のパスが存在する可能性があります。
詳細については、about_PSModulePathを参照してください。
モジュールの詳細については、「 about_Modules」を参照してください。
プロファイルを分離する
PowerShell プロファイルは、PowerShell の起動時に実行されるスクリプトです。 このスクリプトでは、コマンド、エイリアス、関数、変数、モジュール、PowerShell ドライブを追加して、環境をカスタマイズします。 プロファイル スクリプトを使用すると、手動で再作成しなくても、すべてのセッションでこれらのカスタマイズを使用できます。
PowerShell 7 でプロファイルの場所へのパスが変更されました。
- Windows PowerShell 5.1 では、プロファイルの場所は
$HOME\Documents\WindowsPowerShell
。 - PowerShell 7 では、プロファイルの場所が
$HOME\Documents\PowerShell
。
プロファイルのファイル名も変更されています。
$PROFILE | Select-Object *Host* | Format-List
AllUsersAllHosts : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\<user>\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
詳細については、 about_Profiles。
PowerShell 7 と Windows PowerShell 5.1 モジュールの互換性
Windows PowerShell 5.1 で使用するほとんどのモジュールは、Azure PowerShell や Active Directory など、PowerShell 7 で既に動作しています。 Microsoft Graph、Office 365 などの他のモジュールに対するネイティブ PowerShell 7 サポートを追加するために、他のチームと協力し続けています。 サポートされているモジュールの現在の一覧については、 PowerShell 7 モジュールの互換性に関する説明を参照してください。
注
Windows では、互換性のないモジュールを使用するユーザーのために PowerShell 7 への移行を容易にするために、 useWindowsPowerShell スイッチを Import-Module
に追加しました。 この機能の詳細については、 about_Windows_PowerShell_Compatibilityを参照してください。
PowerShell リモート処理
PowerShell リモート処理を使用すると、1 台以上のリモート コンピューターで任意の PowerShell コマンドを実行できます。 永続的な接続の確立、対話型セッションの開始、リモート コンピューターでのスクリプトの実行を行うことができます。
WS-Management リモート処理
Windows PowerShell 5.1 以下では、接続ネゴシエーションとデータ 転送に WS-Management (WSMAN) プロトコルを使用します。 Windows リモート管理 (WinRM) は WSMAN プロトコルを使用します。 WinRM が有効になっている場合、PowerShell 7 では、リモート処理接続に Microsoft.PowerShell
という名前の既存の Windows PowerShell 5.1 エンドポイントが使用されます。 PowerShell 7 を更新して独自のエンドポイントを含めるには、 Enable-PSRemoting
コマンドレットを実行します。 特定のエンドポイントへの接続の詳細については、PowerShell でのリモート処理のWS-Management を参照してください。
Windows PowerShell リモート処理を使用するには、リモート管理用にリモート コンピューターを構成する必要があります。 手順を含む詳細については、「 リモート要件について」を参照してください。
リモート処理の操作の詳細については、「リモートについて」を参照してください。
SSH ベースのリモート処理
Windows ネイティブ コンポーネント ( WinRM など) を使用できない他のオペレーティング システムをサポートするために、POWERShell 6.x に SSH ベースのリモート処理が追加されました。 SSH リモート処理で、SSH サブシステムとしてターゲット コンピューター上に PowerShell ホスティング プロセスを作成します。 Windows または Linux で SSH ベースのリモート処理を設定する方法の詳細と例については、「 SSH 経由の PowerShell リモート処理」を参照してください。
注
PowerShell ギャラリー (PSGallery) には、SSH ベースのリモート処理を自動的に構成するモジュールとコマンドレットが含まれています。
Microsoft.PowerShell.RemotingTools
から モジュールをインストールし、Enable-SSH
コマンドレットを実行します。
New-PSSession
、Enter-PSSession
、およびInvoke-Command
コマンドレットには、SSH 接続をサポートするための新しいパラメーター セットがあります。
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
リモート セッションを作成するには、 HostName パラメーターを使用してターゲット コンピューターを指定し、 UserName でユーザー名を指定します。 コマンドレットを対話形式で実行すると、パスワードの入力を求められます。
Enter-PSSession -HostName <Computer> -UserName <Username>
または、 HostName パラメーターを使用する場合は、ユーザー名情報の後にアット マーク (@
)、コンピューター名を指定します。
Enter-PSSession -HostName <Username>@<Computer>
KeyFilePath パラメーターを使用して秘密キー ファイルを使用して SSH キー認証を設定できます。 詳細については、「 OpenSSH キー管理」を参照してください。
サポートされているグループ ポリシー
PowerShell には、エンタープライズ環境のサーバーの一貫性のあるオプション値を定義するのに役立つグループ ポリシー設定が含まれています。 これらの設定には、以下が含まれます。
- コンソール セッション構成: PowerShell を実行する構成エンドポイントを設定します。
- モジュール ログを有効にする: モジュールの LogPipelineExecutionDetails プロパティを設定します。
- PowerShell スクリプト ブロック のログ記録を有効にする: すべての PowerShell スクリプトの詳細なログ記録を有効にします。
- スクリプト実行を有効にする: PowerShell 実行ポリシーを設定します。
- PowerShell 文字起こしを有効にする: PowerShell コマンドの入力と出力をテキスト ベースのトランスクリプトにキャプチャできるようにします。
- Update-Help の既定のソース パスを設定する: 更新可能なヘルプのソースをインターネットではなくディレクトリに設定します。
詳細については、about_Group_Policy_Settingsを参照してください。
PowerShell 7 には、グループ ポリシー テンプレートとインストール スクリプトが $PSHOME
に含まれています。
グループ ポリシー ツールでは、管理用テンプレート ファイル (.admx
、.adml
) を使用して、ユーザー インターフェイスにポリシー設定を設定します。 これにより、管理者はレジストリ ベースのポリシー設定を管理できます。
InstallPSCorePolicyDefinitions.ps1
スクリプトは、PowerShell 管理用テンプレートをローカル コンピューターにインストールします。
Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
Directory: C:\Program Files\PowerShell\7
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/27/2020 12:38 AM 15861 InstallPSCorePolicyDefinitions.ps1
-a--- 2/27/2020 12:28 AM 9675 PowerShellCoreExecutionPolicy.adml
-a--- 2/27/2020 12:28 AM 6201 PowerShellCoreExecutionPolicy.admx
個別のイベント ログ
Windows PowerShell と PowerShell 7 は、イベント ログを分離するためにイベントをログに記録します。 PowerShell ログの一覧を取得するには、次のコマンドを使用します。
Get-WinEvent -ListLog *PowerShell*
詳細については、 about_Logging_Windowsを参照してください。
Visual Studio Code での編集エクスペリエンスの向上
PowerShell 拡張機能を使用した Visual Studio Code (VS Code) は、PowerShell 7 でサポートされているスクリプト環境です。 Windows PowerShell Integrated Scripting Environment (ISE) では、Windows PowerShell のみがサポートされます。
更新された PowerShell 拡張機能には、次のものが含まれます。
- 新しい ISE 互換モード
- 統合コンソールの PSReadLine では、構文の強調表示、複数行の編集、バック検索が可能です。
- 安定性とパフォーマンスの向上
- 新しい CodeLens 統合
- パスのオートコンプリートの向上
Visual Studio Code への移行を容易にするには、コマンド パレットで使用できる ISE モードを有効にする機能を使用します。 この関数は、VS Code を ISE スタイルのレイアウトに切り替えます。 ISE スタイルのレイアウトでは、使い慣れたユーザー エクスペリエンスで PowerShell のすべての新機能が提供されます。
新しい ISE レイアウトに切り替えるには、Ctrl++キーを押してコマンド パレットを開き、「PowerShell
」と入力して PowerShell: ISE モードを有効にします。
レイアウトを元のレイアウトに設定するには、 コマンド パレットを開き、 PowerShell: ISE モードを無効にする (既定値に戻す) を選択します。
VS Code レイアウトを ISE にカスタマイズする方法の詳細については、「Visual Studio Code で ISE エクスペリエンスをレプリケートする方法」を参照してください。
注
ISE を新機能で更新する予定はありません。 最新バージョンの Windows 10 または Windows Server 2019 以降では、ISE はユーザーがアンインストールできる機能になりました。 ISE を完全に削除する予定はありません。 PowerShell チームとそのパートナーは、Visual Studio Code 用 PowerShell 拡張機能のスクリプト エクスペリエンスの向上に重点を置いています。
次のステップ
効果的に移行するための知識を備えた PowerShell 7 を今すぐインストールしてください。
PowerShell