Adam the Automator
PowerShell 7 のアップグレードを実行して、すべての新機能にアクセスする準備はできていますか?
PowerShell 6 がリリースされたとき、それは PowerShell の基本バージョンをすべてのプラットフォームに提供することでした (PowerShell Core)。
この記事では、PowerShell 7 のアップグレードを手動で実行する方法と、GPO および PowerShell Remoting を使用して大量のデプロイを行うことでアップデート プロセスを自動化する方法について説明します。
この記事を書いている時点で、PowerShell 7の現在のリリースはPreview 3です。 この記事のほとんどの参考文献はこのバージョンに適用されます。
目次
マシン上の PowerShell バージョンを更新する方法
PowerShell Core 6.0 と同様に、PowerShell Core 7 をインストールするプロセスも似ています。
話を進める前に、PowerShell バージョン 7 をインストールする前に、いくつかの前提条件に触れておきましょう。
- Universal C Runtime がインストールされていること
- Windows Management Framework (WMF) 4.0 以降 (Windows 7 または Windows Server 2008R2 を使用している場合のみ)。 Windows 8.1、Windows 10、Windows Server 2016のようなそれ以降のバージョンのWindowsでは、WMFは必要ありません。
PowerShell 7を手動でインストールする
まず、PowerShell 7をダウンロードします。 そのためには、PowerShellのGitHub Releasesページにアクセスし、インストールしたいバージョンを探します。 この記事では、PowerShell 7.0.0 preview 3 リリースを使用しています。 Windowsの場合は、少し下にスクロールして、PowerShell-7.0.0-preview.3-をダウンロードします。win-x86.msi MSI パッケージをダウンロードして実行します。
ウィザードでは、PowerShell をどこにインストールするかなど、いくつかの簡単な質問がなされます。
ウィザードは、PowerShell を PATH
環境変数に登録するかどうかも尋ねてきます。 PowerShell のインストール フォルダーを PATH
環境変数に追加すると、異なるバージョンの PowerShell や cmd.exe など、他の端末から PowerShell を呼び出すことができます。
もう 1 つのオプションは、「PowerShell を Windows イベント ロギング マニフェストに登録する」です。
次に、すべてのリモート タスクに役立つ PowerShell Remoting を最初から有効にするかどうか尋ねられます。
最後に、エクスプローラーに「ここで開く」コンテキスト メニューを追加するかどうか尋ねられます。 このオプションにより、Windows エクスプローラーでブラウズしているときに任意のフォルダーを右クリックし、その作業ディレクトリ内で PowerShell ウィンドウを開くことができます。
最後の 2 つは完全にオプションであり、あなた次第ですが、最初の 2 つを次のように有効にすることを強くお勧めします。
質問にすべて答えたら、[次へ]をクリックするとインストールが開始されます。
PowerShell 7 の起動
インストールが完了したら、任意のコマンド ライン ターミナルを開いて pwsh-preview
と入力することで、PowerShell 7 を実行することができます。 プレビューが終了すると、pwsh
でPowerShell 7を起動することができるようになります。
PowerShell で PowerShell 7 をインストールする
Microsoft PowerShell チームのリーダーである Steve Lee 氏は、PowerShell の Invoke-RestMethod
コマンドレットを使用して PowerShell 7 をインストールする便利な方法をツイートしました。 このコードスニペットは、このコマンドを使用して PowerShell の GitHub リポジトリを照会し、インストール スクリプトをダウンロードし、1 行で PowerShell 7 をダウンロードしてインストールします。
以下にそのための構文を示します。 Windows PowerShell コンソールを開き、以下のワンライナーを実行します。
iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Preview"
このコードスニペットは、PowerShell の Invoke-Expression
iex
) を使用して文字列を受け取り、それを PowerShell コードとして実行します。 この文字列は、Invoke-RestMethod
irm
)を呼び出し、スティーブが書いたスクリプトをダウンロードします。
このコマンドを実行する前に、リンクを使用して自分でコードを確認することを強くお勧めします!
このスニペットは、UseMSI
Preview
のパラメーターをスクリプトに渡して、最新の MSI を取得してインストールします。
このスクリプトを完全にサイレントかつ無人で実行したい場合は、Quiet
Preview
パラメータはまだ PowerShell 7 Preview 3 を指しています。
モジュールで PowerShell 7 をインストールする
PowerShell 7 をインストールするもう 1 つの方法は、Jeff Hicks 氏の PSReleaseTools という PowerShell モジュールを使用することです。
2 行の PowerShell を使用して、Install-Module
でモジュールをダウンロードし、PSRelaseTools モジュールに付属する Install-PSPreview
コマンドを使用して、PowerShell 7 のプレビュー版をインストールすることができます。
PS51> Install-Module -name PSReleaseTools -ForcePS51> Install-PSPreview -mode Quiet
PowerShell 7 を組織全体に展開する
PowerShell 7 を大規模に展開するには、いくつかの選択肢があります。
GPO による PowerShell 7 の 展開
PowerShell は、MSI としてパッケージ化されているため、他の Microsoft テクノロジとの連携が容易であり、GPO を通して簡単に展開できます。
コンピューター ベースの GPO を使用する
まず、ユーザー ベースのポリシーではなく、コンピューター ベースのポリシーを使用することを確認してください。 この 2 つのポリシーの違いについては、こちらをご覧ください。
ネットワーク ファイル 共有の設定
また、PowerShell 7 MSI を配置したネットワーク共有に、環境内のすべてのサーバーがアクセスできるように適切な権限が設定されていることを確認してください。 この記事の範囲外ですが、ファイル共有の作成についてはこちらを参照してください。
GPO のセットアップ
- コンピューターがアクセスできるように、割り当てられたファイル共有に MSI を配置します
- Group Policy Management Console でスターター GPO を作成します。 スターター GPO の詳細については、こちらをご覧ください。
- GPO が作成されたら、GPO を開き、コンピューターの構成 -> ソフトウェアの設定 に移動します。
- [ソフトウェアのインストール]を右クリックし、[新規 -> パッケージ]を選択します。
- ダイアログ ボックスで、MSI への完全な UNC パスを追加します。 例えば、server.nameefにfolderというファイル共有がある場合、パスは ˶‾᷄ -̫ ‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷅˵ ˶‾᷄ -̫ ‾᷅˵msi
- Click Open -> Assigned -> OK.
必要な OU(s)に GPO をアタッチする
作成したら、必要な OU(s)に GPO をアタッチします。
GPO インストール の進捗状況の確認
グループ ポリシーの展開をより実践的に確認したい場合は、特定の OU のコンピューターに適用されているグループ ポリシー オブジェクトのレポートを作成する、以下の短いスクリプトをチェックしてください。
OU識別名(OU=Domain Controllers,DC=mylab,DC=local)を自分のOUに変更してください。
PowerShell ActiveDirectoryモジュールがインストールされたドメインコントローラーまたはドメインに接続されたコンピューターで実行できることに注意してください。
$computers = Get-ADComputer -Filter * -SearchBase 'OU=Domain Controllers, DC=mylab, DC=local'ForEach ($computer in $computers) { Get-GPResultantSetOfPolicy -Computer $computer -ReportType HTML -Path c:\temp\$computer.html}
特定のサーバーをスポット的にチェックしたい場合には、以下のコマンドが便利です。 このコマンドは、リモートコンピューター($computer
)に接続し、そのコンピューターにインストールされているPowerShellのバージョンを$PSVersionTable.PSVersion
でチェックします。
PS> Invoke-Command -Computername $computer -Scriptblock {$PSVersionTable.psversion}
最後に、グループ ポリシーが適用されていないコンピューターを見つけた場合は、次のコマンドを実行すると、対象のコンピューターでグループ ポリシーが強制的に更新されます。
PS> Invoke-GPUpdate -Computer $computer
PowerShell Remoting を使用した PowerShell 7 の展開
PowerShell をリモート マシンに展開するもう 1 つの素晴らしい方法は、PowerShell を使用することです!
開始する前に、PowerShell リモーティングが有効になっていることと、環境全体でリモート コマンドを実行するための適切な権限が設定されていることを確認してください。
先ほど説明した PowerShell をインストールするためのワンライナーについてはご存知の通りですが、そのコマンドをスクリプト ブロックで「ラップ」し、Invoke-Command
コマンドに 1 台以上のリモート マシンで実行するように指示する必要があります。
以下は、$computers
の配列に格納されているコンピューターのリストをループして、そのすべてでinstall-powershell.ps1スクリプトを実行する例です。
$creds = $(Get-Credential)ForEach ($computer in $computers) { Invoke-Command -ComputerName $computer -Credential $creds {iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Preview -Quiet"}}
まとめ
本番環境でなくても、少なくとも自分のマシンでは、PowerShell のバージョンを最新にしておく理由はたくさんあります。 最新の機能を使用したり、パフォーマンスの強化を利用したり、さらには古いコードが新しいバージョンで壊れないようにすることができます。
このように、新しいバージョンの PowerShell をダウンロードおよびインストールする方法はたくさんあります。 自分の環境に合った方法を選んで、PowerShellin’を続けてください!
Further Reading
- How to Check your PowerShell Version (All the Ways!)
- PowerShell Version (All the Ways!)