【macOSで PowerShell Core】バージョン6.2 をインストールして色々試す

macOSに PowerShell Core 6.2をインストールします。 【1】 Homebrew を使ってインストール、起動 【2】 ps1 スクリプトを実行 【3】 エイリアスについて 【4】 プロファイルについて 【5】 活用など
2019.06.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

コンサルティング部の川原です。

支給された Mac に PowerShell Core 6.2 を入れました。 入れた理由は、前職で PowerShellを愛用していたからです。

環境は下記の通りです。

  • OS: macOS Mojave, version 10.14.5
  • 導入したPowerShell Core: version 6.2.1

インストール・起動

Microsoft: macOS への PowerShell Core のインストール 通りに進めます。 Homebrew が必要です。

シェル上で 下記コマンドを実行します。 PowerShell がインストールされます。

brew cask install powershell

シェル上で pwsh と打つと PowerShell が起動します。

お馴染みのコマンドレットもちゃんと実行できますね。

また Launchpad にアプリケーションが登録されるので、 そこからPowerShell 起動も可能です。

スクリプト実行

PowerShellスクリプト (ps1 拡張子) を実行してみます。

問題なく実行できました。

Windowsマシンの場合は デフォルトでスクリプトが実行できないポリシー( Restricted ) となっており、 Set-ExecutionPolicy コマンドレットを実行してポリシーを変更する必要がありました。

が、非Windowsマシンはデフォルトの実行ポリシーは Unrestricted なので、特に対応不要で実行できるみたいです。

On non-Windows computers, the default execution policy is Unrestricted and cannot be changed.

Microsoft: About Execution Policies より引用

エイリアス

Get-Alias コマンドレットで登録されているエイリアス一覧を取得できます。

Set-Alias コマンドレットで自分で新規エイリアスを登録することができます。

Windows版 PowerShell では よく使われる Linux コマンド名 (ls, cat など) が デフォルトのエイリアス設定に入っています。

  • ls -> Get-ChildItem
  • cat -> Get-Content など

が、Mac, Linux 版PowerShell では衝突を回避する目的でそれらのエイリアス設定が入っていません。 ls を実行すると bash の ls が実行されます。 ( 参考: Microsoft "Getting Started with PowerShell Core on Windows, Mac, and Linux" )

実際に Mac版 PowerShell Core と 自宅PCの Windows版 PowerShell Core のエイリアスを 比較してみました。 下記エイリアスは Windowsにはありましたが、 Mac にはありません。

ac -> Add-Content
cat -> Get-Content
clear -> Clear-Host
cnsn -> Connect-PSSession
compare -> Compare-Object
cp -> Copy-Item
cpp -> Copy-ItemProperty
diff -> Compare-Object
dnsn -> Disconnect-PSSession
gin -> Get-ComputerInfo
gsv -> Get-Service
ls -> Get-ChildItem
man -> help
mount -> New-PSDrive
mv -> Move-Item
ps -> Get-Process
rm -> Remove-Item
rmdir -> Remove-Item
sasv -> Start-Service
sleep -> Start-Sleep
sort -> Sort-Object
spsv -> Stop-Service
start -> Start-Process
stz -> Set-TimeZone
tee -> Tee-Object
write -> Write-Output

プロファイル

PowerShell のプロファイルは bash でいう .bash_profile にあたります。 PowerShell 開始時に動作するスクリプトです。

このスクリプトのパスは $PROFILE 変数に格納されています。

Linux/macOS のプロファイルパスは ~/.config/powershell/profile.ps1 となっています。

例えば、下記内容を $PROFILE に登録すると、PowerShell 起動時に プロンプト表示が 「ディレクトリ名のみ」となります。

# プロンプト表示をディレクトリ名のみにする
function global:prompt {
    return (($pwd.Path -split '/')[-1] + ">")
}

必要に応じて $PROFILE に 他エイリアス設定などを入れます。

さいごに (活用など

以上、PowerShell Core のインストールでした。

Windows PowerShell を愛用していた方は、 Linux/Mac でも PowerShellを使ってみてはいかがでしょうか。 今のところ不便なく使えています。

PowerShell のオブジェクトをパイプで渡す概念が新鮮で私は好きです。 また、個人的には CSV,JSON,XML などのデータファイルを扱うときに便利だと感じています。 下記のように簡単にインポートできます。

# CSVファイル インポート
$csv = Import-Csv ./sample.csv

# CSVファイル インポート (上と同じ)
$csv = Get-Content ./sample.csv | ConvertFrom-Csv

# JSONファイル インポート
$json = Get-Content ./sample.json | ConvertFrom-Json

# XMLファイル インポート
$xml = [xml] (Get-Content ./sample.xml)