しばたテックブログ

気分で書いている技術ブログです。

PSCoreUpdateというPowerShellモジュールを公開しました

個人的な不便さからPowerShell Coreのアップデートを自動化するためのモジュールを作りました。
ソースと基本的な使い方はGitHubに上げています。

github.com

作った動機

現在、Windows環境においては一度インストールしたPowerShell Core 6.0のアップデートを自動で行う方法は無く、毎回新しいインストーラを手動でダウンロードして実行しなおす必要があります。
一応Office等のMicrosoft製ソフトと同様にMicrosoft Update経由での自動アップデートに対応する計画が立てられている(#6118)のですが、実現までにはまだまだ時間がかかりそうです。

また、MacOS環境においてはHomebrew Caskによる更新が可能ですが、そもそも論としてHomebrewのインストール自体が割と手間なためHomebrewに頼らない更新方法が欲しかったというのもあります。

インストール方法

PowerShell Galleryからインストール可能です。

Install-Module PSCoreUpdate -Scope CurrentUser

なお、このモジュールはあくまで更新のためのツールなので最初にPowerShell Core 6.0をインストールするのは手動で行う必要があります。

使い方

このモジュールには4つのコマンドがあり、各コマンドの使い方をざっくり説明していきます。

Update-PowerShellCore

新しいバージョンのPowerShell Coreがリリースされている場合、インストーラーのダウンロードと自動実行を行います。
Windowsの場合はMSIファイル、MacOSの場合はPKGファイルをダウンロードして実行します。

新しいバージョンが無い場合は何もしませんが、-Forceパラメーターを指定することで過去バージョンのインストールを強制することも可能です。

# 実行例
Update-PowerShellCore -Latest

実行イメージはこんな感じです。

-Silentパラメーターを指定することでサイレントインストールにすることも可能です。

# 実行例
Update-PowerShellCore -Latest -Silent

なお、このコマンドはWindowsとMacOS専用です。
Linux環境においてはAptやYum等の標準のパッケージ管理ツールで十分との判断をしています。

Test-LatestVersion

現在のコンソールが最新バージョンかを判定します。

# 実行例
Test-LatestVersion

最新バージョンの場合

f:id:stknohg:20180408222143p:plain

最新バージョンでない場合

f:id:stknohg:20180408222340p:plain

Find-PowerShellCore

GitHubからPowerShell Coreのリリース情報を取得します。
パラメーターによるバージョン指定も可能です。

# 実行例
Find-PowerShellCore -Latest

f:id:stknohg:20180408222355p:plain

内部的にはGitHub REST APIを使っており、使用回数にレートリミットが設けれられています。
通常であれば問題にならないはずですが、レートリミットに引っかかる様な場合は-Tokenパラメーターにアクセストークンを指定することで回避可能にしています。

# 実行例
Find-PowerShellCore -Latest -Token $env:GITHUB_ACCESS_TOKEN

Save-PowerShellCore

PowerShell Coreのリリースアセット(MSIファイルなど)をダウンロードします。
Download-PowerShellCoreにエイリアスしています。

Save-PowerShellCore -Latest -AssetType MSI_WIN64 -OutDirectory C:\Temp

アセットの種類は以下となっています。

種類 内容
MSI_WIN32 [PowerShell version]-win-x86.msi
MSI_WIN64 [PowerShell version]-win-x64.msi
PKG_OSX1011 [PowerShell version]-osx.10.11-x64.pkg
PKG_OSX1012 [PowerShell version]-osx.10.12-x64.pkg
RPM_RHEL7 [PowerShell version]-rhel.7.x86_64.rpm
DEB_DEBIAN8 [PowerShell version]-debian.8_amd64.deb
DEB_DEBIAN9 [PowerShell version]-debian.9_amd64.deb
DEB_UBUNTU14 [PowerShell version]-ubuntu.14.nn_amd64.deb
DEB_UBUNTU16 [PowerShell version]-ubuntu.16.nn_amd64.deb
DEB_UBUNTU17 [PowerShell version]-ubuntu.17.nn_amd64.deb
APPIMAGE [PowerShell version]-x86_64.AppImage
TAR_LINUXARM32 [PowerShell version]-linux-arm32.tar.gz
TAR_LINUX64 [PowerShell version]-linux-x64.tar.gz
TAR_OSX [PowerShell version]-osx-x64.tar.gz
ZIP_WINARM32 [PowerShell version]-win-arm32.zip
ZIP_WINARM64 [PowerShell version]-win-arm64.zip
ZIP_WIN32 [PowerShell version]-win-x86.zip
ZIP_WIN64 [PowerShell version]-win-x64.zip

【2018/04/23追記】 初期セットアップスクリプト

初期セットアップスクリプトを作りました。
詳しくは下記エントリをご覧ください。

blog.shibata.tech