初めに
こんにちは、本書をご覧になっていただき、ありがとうございます。
少しずつ書き進めています。
・シリーズ全体構成はこちら
対象の読者
以下のような方々のお役にたてれば幸いです。
- ソフトウェア開発、特に製造や評価などに関わる人
- Windows用のアプリやツールをコマンドから使いたい人
- Windows用のアプリやツールをスクリプト化して処理したい人
# PowerShellって何という人への説明
ウィキペディア(日本版)によると、「マイクロソフトが開発した拡張可能なコマンドラインインターフェイス (CLI) シェルおよびスクリプト言語」となっている。**nix系OS(Linux,FreeBSD,MacOS,,,)でのbashなど(sh,tcsh,zsh,,,)にあたる。マイクロソフトのOSには、MS-DOSの時代から、「COMMAND.COM」というコマンドラインシェルがあり、Windows NT 以降では、「cmd.exe」と併用されていた。
余談だが、筆者がパソコンを触り始めた1980年ごろはOSはポピュラーでなく(CP/Mはあったかな?)、シェルとカーネル、ツールなどが一体となったBasic言語が動く環境が主流であった。
PowerShellのいろいろ
PowerShell 5.x
2016年8月以降から現在のところ、Windows 10 Anniversary Updateを適用したOS及びWindows Server 2016以降のOSに標準で入っているPoserShellは、5.1となっており、以下のコマンドで確認できる。
$PSVersionTable
PoserShell Core 6.x そして PowerShell 7.x1
最近のWindows10でPoserShellを起動すると、最初に以下のような表示があり、そのなかで「新しいクロスプラットフォームの PowerShell」とでてくるので、なんだろうと不思議に思っている読者もいるかもしれない。
実は、COMMAND.COMからPowerShell5.1までのWindows系シェルは、ロケール(言語設定)の扱いが弱かった。筆者がWSL2になるまでWSLを使わなかったのも、Windows環境でのロケールの弱さが一因であった。「PowerShell Core」は、オープンソースで開発されたシェルで、Linux/MacOSへも移植されている。(2016/08 - 2020/03) そして、嬉しいことに、既定の文字コードがUTF-8となった。
これまでの Windows PowerShell の場合、Shift-JIS(日本語環境)が標準で、UTF-8やunicode(UTF-16)を指定するとBOM(Byte Order Mark)付になっていた。それで、Linux環境との相性がいまいちであり、コマンドの実行で想定外の動作をしたりして困ることがあった。
情報技術・装置が、もともと西欧圏から始まったこともあり、アルファベットを中心に文字種は7bit(128種類)で表現できていた。世界各国が使用するようになり、文字種も拡張を続けてきた。Unicode系の文字種で統一されつつあるが、現在でも多数の文字コードが残っている。IANAの文字コード表に、世界各国の文字コードが出ているが、日本だけでも相当な種類がある2
「PowerShell Core」の最新版は、「PowerShell 7」であり、Windows PowerShell とは別のディレクトリにインストールされ、Windows PowerShell 5.1 と共存させて実行することができる。
特徴(詳細は省略)
- ランタイムとして「.NET Core」 使用
- Windows、macOS、Linuxで動作可能
- コマンドレット
- 統合開発環境「PowerShell ISE」
PowerShell 7 のインストール
scoopでインストール
ありがたいことに、@yama-github さんからコメントをいただいた。この記事執筆時ではscoop からのインストールできるバージョンが古いものであったため、手動でのやり方を記述した。現在ではscoopで最新版がインストールできるので、追加しておく。なお、以下ではGlobalインストールしているが、「」を外すことで自分専用でのインストールもできる。
確認
powershellにて確認し、インストールする。
PS C:\Users\cintake> scoop search pwsh
Results from local buckets...
Name Version Source Binaries
---- ------- ------ --------
pwsh 7.2.6 main
pwsh-beta 7.3.0-preview.7 versions
グローバルインストール
まず、「sudo」をインストールし、それを利用して管理者として「pwsh」をインストールする。
PS C:\Users\cintake> scoop install sudo
Installing 'sudo' (0.0.2) [64bit] from jfut bucket
sudo_v0.0.2_windows_amd64.zip (946.3 KB) [====================================================================] 100%
Checking hash of sudo_v0.0.2_windows_amd64.zip ... ok.
Extracting sudo_v0.0.2_windows_amd64.zip ... done.
Linking ~\scoop\apps\sudo\current => ~\scoop\apps\sudo\0.0.2
Creating shim for 'sudo'.
'sudo' (0.0.2) was installed successfully!
PS C:\Users\cintake> sudo scoop install --global pwsh
Installing 'pwsh' (7.2.6) [64bit] from main bucket
Downloading https://github.com/PowerShell/PowerShell/releases/download/v7.2.6/PowerShell-7.2.6-win-x64.zip (103.7 MB)...
Checking hash of PowerShell-7.2.6-win-x64.zip ... done.
Running pre_install script...in-x64.zip ...
Linking C:\ProgramData\scoop\apps\pwsh\current => C:\ProgramData\scoop\apps\pwsh\7.2.6
Creating shim for 'pwsh'.
Adding C:\ProgramData\scoop\shims to global path.
Creating shortcut for PowerShell Core (pwsh.exe)
Persisting Microsoft.PowerShell_profile.ps1
Persisting profile.ps1
Running post_install script...
'pwsh' (7.2.6) was installed successfully!
Notes
-----
Since Scoop uses pwsh.exe internally, to update PowerShell Core itself,
run `scoop update pwsh` from Windows PowerShell, i.e. powershell.exe.
Add PowerShell Core as a explorer context menu by running:
'C:\ProgramData\scoop\apps\pwsh\current\install-explorer-context.reg'
For file context menu, run 'C:\ProgramData\scoop\apps\pwsh\current\install-file-context.reg'
手動インストール
インストールの準備
筆者はスクリプトはBashなどで作成することが多いので、PowerShellはあくまでWindows用の補完的なスクリプトを作成するときにしか使わない。最近のWindows環境では、VisualStudioCodeのターミナルなど、PowerShellを使う場面が多くなってきており、どうせ使うならロケールの問題のないCore系を入れたほうが作業効率があがるので、入れている。
- ノーマルのPowerShellを起動すると表示されるリンク1をたどる
- インストールのリンクをたどる => 現在は PowerShel 7.1 へのリンク
- サポートされるOS3の一部では、前提となるライブラリ4をインストール5
- Githubのリリースページから該当するバージョン選択6
インストール
1)バージョンの確認
Githubのリリースページでは、最新版が先頭とは限らない。現時点では7.0のパッチバージョンが先頭になっていた。
2)スクロールして最新版を探
3)リンクをたどるか、下のほうのAssetsの三角マークを広げる。
4)ダウンロードして実行
自分の環境に合わせて「PowerShell-7.1.1-win-x64.msi」などを選択してダウンロード。
そのまま実行するか、以下のコマンドでサイレントインストールを実行する。
- 下記コマンドでは、まずscoopでsudoをインストール
- オプションとして3つ指定
- Explorerのコンテキストメニューに 【Open PowerShell】(PowerShellを開く)を追加
- PowerShellRemotingを有効化
- Windows イベント ログのマニフェストを登録
- プログレス表示(/passive)して、Quietモード(自動)(/quiet)で実行
cd <ダウンロードした場所>
scoop install sudo
sudo msiexec.exe /package PowerShell-7.1.1-win-x64.msi /quiet /passive ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1
5)インストールそのものは他の記事に譲り、ここでは省略
インストーラ起動直後
オプションの選択
インストール中に、以前に入っていた古いバージョンを検出すると、自動的に削除し、新バージョンに更新してくれる。
6)確認
PATHに「PowerShell 7」が入っていることを確認する。
PowerShell Core系のコマンドはpwsh.exeなので、以下のようにしてパスに入っているかを調べる。
必ず、Posershellを新しく開くこと。
get-command pwsh
「where.exe pwsh」も使えるが、「where pwsh」だとpowershell環境では別の意味を持つために無反応になる。
7)ターミナルの起動
以下のコマンドで「PowerShell Core(現在は7.1)」のターミナルを起動する。
start pwsh
8)バージョンなど
linux系のunameにあたるコマンドレットを実行してみる。
get-host
親記事:WSL2とVSCで作るWindowsでのDocker内開発環境(2021年睦月)
-
主な日本語文字 Shift_JIS,CP932,EUC-JP,ISO-2022-JP,UTF-8,,, 詳しくは=> IANAのCharacter Sets ↩
-
Windows 7 SP1、Server 2008 R2、およびそれ以降のバージョンでサポートされている。 ↩
-
「ユニバーサル C ランタイム」や「Windows Management Framework (WMF) 」が必要 ↩
-
GitHubでのPSCoreのリリース配布場所: 頻繁に変更され、Preview版などもあるので注意してバージョンを選択する。 さらに特定バージョン内ではWindows/Mac/Linuxなどのプラットフォーム別にインストールファイルが置いてあるので、自分の環境に合わせて適切なものを選択する。https://github.com/PowerShell/PowerShell/releases ↩