Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

WindowsでPowerShellを最新バージョンに更新する方法(5.1へのアップグレードとPowerShell 7の導入)

本記事では、Windows PowerShellを最新の5.1へ更新する手順と、新しいPowerShell Core(PowerShell 7)をインストール・アップグレードする方法を詳しく解説します。現在、PowerShellには2つの系統が存在します。開発が終了した従来型のWindows PowerShell(最終バージョンは5.1)と、クロスプラットフォーム対応の新世代PowerShell Coreです。バージョン番号は5.1から6.0、6.1、7.0、7.1と続いていますが、実際にはまったく別のプラットフォームである点に注意が必要です。ここでは、両者の更新方法をそれぞれ紹介します。

Windows PowerShell 5.1へのアップグレード

Windows Server 2012 R2(Windows 8.1)には、初期状態でPowerShell 4.0がインストールされています。ここでは、Windows Server 2012 R2上でWindows PowerShellを5.1へ更新する手順を見ていきましょう。

まず、現在のPowerShellバージョンを確認します(スクリーンショットではPowerShell 4.0がインストールされています)。

$PSVersionTable.PSVersion

PowerShellを5.1へアップグレードするには、Windows Management Framework 5.1(WMF 5.1)をインストールします。この際、前提条件として.NET Framework 4.5.2以降が必要です。以下のコマンドで.NETのバージョンを確認しましょう。

(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release).Release

リリース番号が378675と表示された場合、.NET Framework 4.5.1がインストールされていることを意味します。この場合は、最新の.NET Framework 4.8をダウンロードしてインストールする必要があります(オフラインインストーラーのリンク:https://go.microsoft.com/fwlink/?linkid=2088631 — ndp48-x86-x64-allos-enu.exe)。

.NET 4.8をインストールしたら、コンピューターを再起動してください。なお、.NET 4.5.2未満の環境でWMF 5.1をインストールすると、一部のPowerShell機能が利用できなくなるので注意しましょう。

次に、Windows Server 2012 R2用のWMF 5.1Win8.1AndW2K12R2-KB3191564-x64.msu:https://go.microsoft.com/fwlink/?linkid=839516)をダウンロードし、MSUファイルを実行してインストールします。

サーバーの再起動後、PowerShellコンソールを開き、バージョンが5.1に更新されていることを確認してください。

サポートが終了したWindows 7やWindows Server 2008 R2でも、同じ手順でPowerShell 2.0から5.1へアップグレード可能です。まず.NET Framework 4.5.2以降をインストールし、その後WMF 5.1を導入します(ダウンロードリンクはWindows Server 2012 R2用とは異なるので注意してください)。

PowerShell Core 7のインストール・更新方法

Windows 10およびWindows Server 2019に標準搭載されている最新のWindows PowerShellは5.1です。Microsoftはこれに代わるクロスプラットフォーム版としてPowerShell Coreの開発を進めており、現在は6.0、6.1、6.2、7.0、7.1が公開されています。PowerShell CoreはWindows PowerShellとは独立した新しいプラットフォームであり、コンピューターに並行してインストールされます。つまり、PowerShell 5.1を直接PowerShell Core 7.1に「アップグレード」することはできず、PowerShell 7は別個のアプリケーションとして導入されます。

PowerShell 7.1ではWindows PowerShellとの互換性が大幅に向上しているため、既存のPS1スクリプトやコマンドレットも問題なく実行できます。

PowerShell Core 6.0がインストール済みの場合でも、最新のPowerShell 7.1へ更新できます(Windows PowerShell 5.1との共存も可能です)。ここでは、Windows 10 20H2環境でPowerShell Coreを更新する例を紹介します。更新方法は主に2つあります。

  • GitHubからMSIインストーラーを手動でダウンロードする
  • PowerShellコンソールから直接ダウンロード・インストールする

最新のPowerShell Coreは、Windows 7 SP1やServer 2008 R2以降のすべてのWindowsにインストール可能です。

MSIパッケージを使ってインストールする場合は、プロジェクトページ https://github.com/PowerShell/PowerShell にアクセスし、最新の安定版リリースを探します。執筆時点では2021年3月4日リリースのPowerShell v7.1.3が安定版です。より新しいプレビュー版のv7.2.0も公開されていますが、実運用では安定版を待つことをおすすめします。Assets一覧を展開し、自分のWindowsに合ったパッケージ(PowerShell-7.1.3-win-x64.msiまたはPowerShell-7.1.3-win-x86.msi)をダウンロードしてインストールしてください。

SCCM/MDTやスクリプトでサイレントインストールを行う場合は、以下のようなパラメータ付きコマンドを使用します。

msiexec.exe /package PowerShell-7.1.0-win-x86.msi /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1

また、PowerShellコンソールから直接更新することも可能です。以下のコマンドで最新版を取得・インストールできます。

iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"

このコマンドはGitHubからPowerShell 7.1のMSIファイルをダウンロードし、インストーラーを起動します。その他にも便利なパラメータがあります。

  • -Destination — インストール先フォルダーを変更する
  • -Preview — 最新のプレビュー版をインストールする
  • -Quiet — サイレントモードでインストールする
  • -AddToPath — インストールディレクトリを環境変数PATHに追加する

インストール完了後、PowerShell Core(pwsh.exe)のウィンドウが開きます。ここでバージョンを確認し、7.1.3になっていることを確かめましょう。

WinGetパッケージマネージャーが導入済みなら、次のコマンドで最新版をインストール・更新できます。

winget install --id=Microsoft.PowerShell -e

特定のバージョンを指定してインストールすることも可能です。

winget install --id=Microsoft.PowerShell -v "7.1.2" -e

Chocolateyを使用している場合は、以下のコマンドを使います。

choco install powershell -y
choco upgrade powershell -y

PowerShell 7.xの場合:
choco install pwsh -y
choco upgrade pwsh -y

各バージョンのインストール先ディレクトリは以下の通りです。

  • Windows PowerShell 5.1:$env:WINDIR\System32\WindowsPowerShell\v1.0
  • PowerShell Core 6.x:$env:ProgramFiles\PowerShell\6
  • PowerShell Core 7.x:$env:ProgramFiles\PowerShell\7

PowerShell 6.xがインストールされていた環境では、PowerShell 7.1のインストール時に$env:ProgramFiles\PowerShell\6ディレクトリは自動的に削除されます。

また、実行ファイル名が変更された点にも注目してください。PowerShell Coreの実行ファイルはc:\Program Files\PowerShell\7\pwsh.exeであり、スタートメニューには独自のアイコンが表示されます。

  • .NET FrameworkベースのWindows PowerShellを起動するにはpowershell.exeを使用
  • .NET CoreベースのPowerShell Coreを起動するにはpwsh.exeを使用

つまり、Windows PowerShell 5.1とPowerShell Core 7.1が同一マシン上に共存している状態になります。

デバイスにインストールされたPowerShellのバージョンとビルドを確認するには、pwsh.exeファイルのバージョン情報を参照します。

(Get-Command 'C:\Program Files\PowerShell\7\pwsh.exe').Version

リモートコンピューター上のファイルバージョンは、次のように確認できます。

Invoke-Command -Computername computer1 -Scriptblock {(Get-Command 'C:\Program Files\PowerShell\7\pwsh.exe').Version}

Windows PowerShellには下位互換モードが用意されており、新しいバージョンがインストールされていても古いバージョンを起動できます。特定のバージョン(例:4.0)を起動するには、次のコマンドを使用します。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Version 4

Microsoft StoreからのPowerShell Coreインストール

Windows 10では、Microsoft Store経由でPowerShellをインストール・更新することもできます。ストアでPowerShellアプリを検索するか、公開ページのリンクからアクセスしてください。この方法のメリットは、ストアアプリがインストール済みバージョンを自動的に追跡し、更新が配信されると自動で適用してくれる点です。

一方で、ストア版のPowerShellはサンドボックス内で動作するという制約がある点には留意が必要です。

APPX/MSIX形式のアプリケーションファイルをダウンロードし、Add-AppxPackageコマンドレットを使って手動インストールすることも可能です。

グループポリシーによるPowerShell Coreの一括展開

Active Directoryドメイン環境では、グループポリシー(GPO)を利用してPowerShell Coreを一元的に展開・更新できます。GPOのMSIパッケージ配布機能を使用しましょう。

  1. PowerShellのMSIインストールファイルをダウンロードし、ドメインコントローラーのSYSVOLディレクトリにコピーします。
  2. ドメインのグループポリシー管理コンソール(gpmc.msc)を開き、新しいGPOを作成して、対象のコンピューターやサーバーが属するOUにリンクさせます。
  3. GPOのコンピューターの構成ソフトウェアの設定セクションに移動し、新しいパッケージを作成します。ドメイン内のSYSVOLフォルダーにあるPowerShell MSIファイルへのUNCパスを指定してください。GPOのWMIフィルターを活用すれば、ポリシーの適用対象をより正確に絞り込むこともできます。
  4. ソフトウェアインストールのポリシー設定を反映するには、コンピューターの再起動が必要です。起動時にすべてのコンピューターへ新版のPowerShellがインストールされます。

PowerShellのリモート更新

コマンドラインからリモートコンピューターのPowerShellを更新するには、いくつかの方法があります。

1つ目の方法は、共有ネットワークフォルダー上のMSIインストーラーを使ってリモート更新を行うものです。

Invoke-Command -ComputerName mun-srv01 -ScriptBlock {Start-Process msiexec.exe -ArgumentList '/package "\\mun-fs01\install\PowerShell-7.1.3-win-x64.msi" /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1' -Wait}

次のスクリプトは、Active Directoryドメイン内のすべての稼働中Windows 10コンピューターを抽出し、それぞれに対してPowerShell Coreのダウンロードとインストールを開始します。

Get-ADComputerコマンドレットを使用するには、Active Directory PowerShellモジュールがインストールされている必要があります。
$ADComputers = Get-ADComputer -Filter 'operatingsystem -like "*Windows 10*" -and enabled -eq "true"'
ForEach ($computer in $ADcomputers) {
Invoke-Command -ComputerName $computer {iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet"}
}

なお、Enter-PSSessionInvoke-CommandなどのPowerShellリモーティングコマンドでリモートコンピューターに接続する際は注意が必要です。PowerShell 7.1のエンドポイントに接続したい場合は、構成名を明示的に指定する必要があります。

Enter-PSSession -ComputerName dc01 -ConfigurationName "powershell.7.1.3"

この指定がない場合、接続先はPowerShell Remoting 5.1のエンドポイントになってしまうので気をつけましょう。

  1. Windows 11でPowerShellのバージョンを素早く確認する方法

    PowerShellは、Windows 10やWindows 11に標準搭載された強力で便利なツールです。しかし、「PowerShellをアップデートしたいけれど、今使っているバージョンがわからない」と困ったことはありませんか?この記事では、Windows 11にインストールされているPowerShellのバージョンを簡単に確認する方法を詳しく解説します。 なお、Windows Package Manager(通称 winget)は、コマンドプロンプトやPowerShellから利用できるコマンドラインツールで、アプリのインストール・管理・設定・アンインストールまで行えます。Windows 11

  2. Windows 11でPowerShellを更新する3つの方法【初心者向け完全ガイド】

    Windowsオペレーティングシステムを常に最新のソフトウェアとセキュリティアップデートの状態に保つことは、パソコンを快適に維持するために欠かせません。特にWindows 11は、以前のバージョンよりもセキュリティが強化されて設計されていますが、だからといってセキュリティ上の問題が一切起こらないわけではありません。OSを最新の状態に保てば、Microsoftが提供する新機能や新しい能力にもいち早くアクセスできるようになります。 当ブログを定期的にお読みの方なら、ソフトウェアの更新とパッチ適用の重要性はすでにご存じかもしれません。通常、これは最新のOSアップデート、サードパーティ製ソフトウェアの