powershell v7.1のインストール とバージョン管理の注意点

2020年11月24日火曜日

技術的備忘録

t f B! P L

先日、PowerShell のバージョン 7.1 がリリースされた。

以前の PowerShell は Windows 10 にプリインストールされている PowerShell v5.1 を除くと、インストールが GitHub から手動でダウンロードしてインストールするので、やや一般のオープンソース・ソフトウェアのようでセットアップ環境が不親切だった。

しかし、PowerShell v7.1 では Microsoft Srore からのリリースが開始され、他にも dotnet tool でコマンドラインで、Debian系Linux の apt のように簡単にセットアップできようになっている。

v7.1 でセットアップ環境が充実し、本格的なアプリケーションとしてリリースされるようになった。

 

今後は今まで cmd だけを使用していたユーザーや企業にも PowerShell が広く使われるのではないかと思われる。

 

PowerShell にはいくつか種類があり、バージョンの管理にも多少の知識が必要になる。

今回は、PowerShell のバージョンについての解説をインストール方法と共に解説する。

 

PowerShell の種類

 

PowerShell には大きく分けて以下の三種類ある。

 

Windows PowerShell (.NET Framework ベース)

PowerShell Core (.NET Core ベース)

Azure PowerShell (Microsoft Azure 操作用ターミナル)

 

Windows 10 や Windows Server 2016, Windows Server 2019 にプリインストールされている PowerShell v5.1 は「Windows PowerShell」になる。

これは .NET Framework で開発された PowerShell で、PowerShell v5.1 がこれに該当する。

PowerShell v5.1 は Windows PowerShell の最新バージョンで、おそらくこれが最終バージョンとなり、今後バージョンアップすることはない。

実行ファイルの名前は「powershell.exe」となる。

 

PowerShell v5.1 の後にリリースされた v6.2 や、最近リリースされた PowerShell v7.1 は「PowerShell Core」に該当する。

これは、.NET Core で開発された PowerShell で、Windows 意外にも Linux や Mac でも稼働する「どこでも使えるシェル」である。

今後リリースされる PowerShell はこの「PowerShell Core」系列になる。

実行ファイルの名前は「pwsh.exe」となる。

 

「Windows PowerShell」はアップグレードが中止されており、「PowerShell Core」という言葉も廃止されたので、現在は「PowerShell」という言葉だけで通用する。

 

Azure PowerShell は、Microsoft Azure 操作のための専用ターミナルで、PowerShellベースで開発されているが、一般的な PowerShell とは全く別の物である。

 

Microsoft Azure 操作ターミナルには、PowerShellベースで開発された「Azure PowerShell」以外に、Pythonベースで開発された「Azure CLI」というターミナルも存在する。

https://docs.microsoft.com/ja-jp/powershell/azure/?view=azps-5.1.0

 

今回は Azure ターミナルの解説はしない。

純粋なシェルの PowerShell の解説を行いたい。

 

PowerShell v7.1 の導入方法は複数ある

 

PowerShell のインストール方法は Microsoft の公式サイトで分かりやすく解説しているので、公式サイトを見た方が良い。

https://docs.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-7.1#installing-the-msi-package

 

この中で普通のPCやサーバーに簡単にセットアップできる方法は三種類になる。

 

GirHubの公式リリースから「PowerShell-7.1.0-win-x64.msi」をダウンロードしてインストールする。

Microsoft Store からインストールする。

dotnet tool でインストールする。

 

他の方法は手順が面倒だったり、まだ試作品段階のツールによるインストールだったり、IoT Core など普通のPCとは異なる環境へのインストール方法なので、関係ないと言える。

 

お勧めなのは、最初の二つである。

 

GirHubの公式リリースからインストールする

最初のGirHubの公式リリースからのインストールは、過去のバージョンのリリースでも使用されてきた方法なので、慣れている人も多いと思う。

以下がGirHubの公式リリースサイトである。

https://github.com/PowerShell/PowerShell/releases

v7.1.0 ならここになる。

https://github.com/PowerShell/PowerShell/releases/tag/v7.1.0

Windows 10 の 64bit 版なら「PowerShell-7.1.0-win-x64.msi」をダウンロードしてインストールする。

「.msi」ファイルはインストーラーなのでダブルクリックで起動する。

後はお任せである。

 

Microsoft Store からインストールする

私は今回この方法を使用した。

https://www.microsoft.com/store/productId/9MZ1SNWT0N5D

これは「インストール」ボタンをクリックするだけで良い。

 

dotnet tool でインストールする

この方法はあまりお勧めしない。

dotnet コマンドは、.NET Core SDK をインストールしていると使用できる。

https://docs.microsoft.com/ja-jp/dotnet/core/install/windows?tabs=net50

最新の .NET Core は「.NET 5.0」である。

以下のサイトから SDK 5.0.100 の Installers Windows x64 のリンクをクリックしてダウンロードしてインストールする。

https://dotnet.microsoft.com/download/dotnet/5.0

手順は特にないのでインストーラーを起動して初期設定でインストールすれば良い。

 

インストールが終わったら、コンソールから以下のコマンドを実行すれば PowerShell dotnet global をインストールできる。

  dotnet tool install --global PowerShell

 

インストールパスの違い

PowerShell はインストール方法によってインストールされる場所が違う。

GirHUB公式サイトからのインストールと、Microsoft Store からのインストールの場合は、以下のパスにインストールされる。

C:\Program Files\WindowsApps\Microsoft.PowerShell_7.1.0.0_x64__8wekyb3d8bbwe

「C:\Program Files\WindowsApps」以下のフォルダーは管理者権限でしか参照できないので、管理者権限で cmd や PowerShell を起動して参照する。

EXE の名前は「pwsh.exe」になっている。

v5.1 までは「powershell.exe」だったので、タスクスケジューラなどでバッチスクリプトを実行している人は注意が必要だ。

ちなみにv5.1のパスは以下の場所になる。

C:\Windows\System32\WindowsPowerShell\v1.0

v5.1 と v7.1 ではインストールパスも実行ファイル名も異なるので、タスクスケジューラなどでバッチスクリプトを実行している場合は、バスとEXE名の変更が必要となる。

 

dotnet tool は異なる

一方、dotnet tool で PowerShell をインストールした場合は、パスが異なる。

dotnet tool でインストールした場合は、ユーザープロファイルの中にインストールされる。

私の場合はユーザープロファイル名が「motoi」なので以下のフォルダーにインストールされている。

C:\Users\motoi\.dotnet\tools\.store\powershell\7.1.0\powershell\7.1.0\tools\net5.0\any\win

ユーザープロファイルの中は、Windows によって厳格にセキュリティ保護されており、そのユーザープロファイルの所有者のユーザーアカウントでログインしなければ、その内容を参照することはできない。

私の場合は「C:\Users\motoi」の配下は私のアカウントでなければ参照できない。

OSのシステムサービスでも参照できない。

マルチユーザーで使用している他のユーザーもアクセスできない。

Windows Server のアカウント管理も同様である。

 

バッチスクリプトの実行に注意が必要

ルートフォルダーや「Program Files」や「Windows」配下のパスにインストールされているソフトウェアは、システムサービスなどが、自由にアクセスし起動できる。

 

ユーザープロファイルのフォルダーは、その所有者でなければアクセスできない。

 

PowerShell のインストール方法によりパスが違うので、「.ps1」スクリプトでバッチを作っているシステム管理者は注意が必要である。

システム用のバッチは深夜などにシステムから起動するので、通常はユーザープロファイルを必要としない配置をしている。

よって、ユーザープロファイルの中にインストールされたソフトウェアは通常は使用しない。

システム用のバッチで「.ps1」スクリプトを使用しているシステム管理者は、「GitHUB公式サイトからのインストール」方法でインストールすべきだろう。

「Microsoft Store」を使用しても良いが、Windows Server からはセキュリティ上アクセスできないケースが多いだろう。

dotnet tool からのインストールは使用しない方が良い。

これは特定ユーザーだけが、自分専用に PowerShell を使用する場合に相応しい。

多くの人には必要無い機能だ。

 

個人のPCユーザーも多くの場合、一人一台で自分専用のPCを使用しているので、ルートフォルダーや「Program Files」や「Windows」配下のパスにインストールされている方が望ましい。

 

タスクスケジューラーなどで dotnet tool を使用する場合は、そのユーザーアカウントでログインしてから使用する必要がある。

セキュリティ的に望ましくない設定だ。

 

古いバージョンは削除する

PowerShell は新しいバージョンをインストールしても、古いバージョンは消えない。

アップグレードされずに、古いバージョンと新しいバージョンが共存してしまう。

v6.2 以降の PowerShell Core 系列は、新しいバージョンをインストールしたら古いバージョンを削除した方が良いと思う。

 

PowerShell は Windows の「設定」の「アプリと機能」で削除 (アンインストール)できる。

 

タスクスケジューラなどの設定も、新しいバージョンをインストールする度に、pwsh.exe のパスなどを変更する事をお勧めする。

シンボリックリンクなどでエイリアス的な物を設定する事も考えた方が良いかも知れない。

 

PowerShell v5.1 は消す事ができない。

少なくとも私は知らない。

PowerShell v5.1 はシステムに結びついているようなので、消さない方が良いと思う。

システム管理に使用する場面は多い。

 

終わり

以上、PowerShell の基礎とインストールの注意点について、老婆心ながら記事にまとめました。

いろいろと間違わないように、ご注意ください。

 

このブログを検索

Translate

人気の投稿

自己紹介

自分の写真
オッサンです。実務経験は Windows環境にて C#,VB.NET ,SQL Server T-SQL,Oracle PL/SQL,PostgreSQL,MariaDB。昔はDelphi,C,C++ など。 趣味はUbuntu,PHP,PostgreSQL,MariaDBかな ?基本無料のやつ。

QooQ