0
0

More than 1 year has passed since last update.

PowerShellCore(2021年睦月)

Last updated at Posted at 2021-01-27

初めに

こんにちは、本書をご覧になっていただき、ありがとうございます。
少しずつ書き進めています。
・シリーズ全体構成はこちら

対象の読者

以下のような方々のお役にたてれば幸いです。

  • ソフトウェア開発、特に製造や評価などに関わる人
  • 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

image.png

PoserShell Core 6.x そして PowerShell 7.x1

最近のWindows10でPoserShellを起動すると、最初に以下のような表示があり、そのなかで「新しいクロスプラットフォームの PowerShell」とでてくるので、なんだろうと不思議に思っている読者もいるかもしれない。
image.png

実は、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系を入れたほうが作業効率があがるので、入れている。

  1. ノーマルのPowerShellを起動すると表示されるリンク1をたどる
  2. インストールのリンクをたどる => 現在は PowerShel 7.1 へのリンク
  3. サポートされるOS3の一部では、前提となるライブラリ4をインストール5
  4. Githubのリリースページから該当するバージョン選択6

インストール

1)バージョンの確認

Githubのリリースページでは、最新版が先頭とは限らない。現時点では7.0のパッチバージョンが先頭になっていた。
image.png

2)スクロールして最新版を探

7.1の最新版であるv7.1.1が見つかった。
image.png

3)リンクをたどるか、下のほうのAssetsの三角マークを広げる。

image.png

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)インストールそのものは他の記事に譲り、ここでは省略

インストーラ起動直後
image.png
オプションの選択
image.png
インストール中に、以前に入っていた古いバージョンを検出すると、自動的に削除し、新バージョンに更新してくれる。
image.png

6)確認

PATHに「PowerShell 7」が入っていることを確認する。
PowerShell Core系のコマンドはpwsh.exeなので、以下のようにしてパスに入っているかを調べる。
必ず、Posershellを新しく開くこと。
image.png

get-command pwsh

image.png
「where.exe pwsh」も使えるが、「where pwsh」だとpowershell環境では別の意味を持つために無反応になる。

7)ターミナルの起動

以下のコマンドで「PowerShell Core(現在は7.1)」のターミナルを起動する。

start pwsh

image.png

8)バージョンなど

linux系のunameにあたるコマンドレットを実行してみる。

get-host

image.png

親記事:WSL2とVSCで作るWindowsでのDocker内開発環境(2021年睦月)

  1. https://aka.ms/pscore6 2

  2. 主な日本語文字 Shift_JIS,CP932,EUC-JP,ISO-2022-JP,UTF-8,,, 詳しくは=> IANAのCharacter Sets

  3. Windows 7 SP1、Server 2008 R2、およびそれ以降のバージョンでサポートされている。

  4. 「ユニバーサル C ランタイム」や「Windows Management Framework (WMF) 」が必要

  5. Windows への PowerShell のインストール

  6. GitHubでのPSCoreのリリース配布場所: 頻繁に変更され、Preview版などもあるので注意してバージョンを選択する。 さらに特定バージョン内ではWindows/Mac/Linuxなどのプラットフォーム別にインストールファイルが置いてあるので、自分の環境に合わせて適切なものを選択する。https://github.com/PowerShell/PowerShell/releases

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0