PowerShell

https://learn.microsoft.com/ja-jp/powershell/

Microsoft 製 CUI。

コマンドレット

PowerShellで実行できるネイティブコマンドはコマンドレットと呼ばれており、 “動詞-名詞”の名前で登録されている。

Get-Command  # すべてのコマンドレットを取得

Linux でいう sudo にあたる操作は、PowerShell を「管理者として開く」ことで実行するか、 マシンの設定から、システム > 開発者向け で “sudo の有効化” を ON にして sudo を使う。

エイリアス

例えばディレクトリを移るコマンドは Set-Location だが、要は cd と同じ。 実際、Set-Location には sl, cd, chdir の3つのエイリアスが用意されている。

man Set-Location

他にもエイリアスを調べるには Get-Alias

Linux コマンド

WSL を有効化していれば、wsl に続ける形で Linux コマンドを実行可能:

which wget
>>> NG

wsl which wget
>>> 実行可能

PROFILE

PowerShell でも Linux でいう .profile とか .bashrc を設定したい。 設定用のファイルは $PROFILE で決まっており、スコープに応じて以下がある:

> echo $PROFILE.AllUsersAllHosts
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1

> echo $PROFILE.AllUsersCurrentHost
C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1

> echo $PROFILE.CurrentUserAllHosts
C:\Users\_username_\OneDrive\ドキュメント\WindowsPowerShell\profile.ps1

> echo $PROFILE.CurrentUserCurrentHost
C:\Users\_username_\OneDrive\ドキュメント\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

CurrentUserCurrentHost が一番安全だけど、 C:\Users\_username_\OneDrive\ドキュメント\ とかいう諸悪の根源ディレクトリにおきたくない。

ひとまず $PROFILE.AllUsersAllHosts に読み込みのみの PROFILE を置いて、 $HOME のスクリプトを読む、という設定にしてみる:

$PROFILE.AllUsersAllHosts
$USER_PROFILE="$HOME\profile.ps1"
if (Test-Path $USER_PROFILE) {. $USER_PROFILE}

この PROFILE でファイルを実行する (Linux でいう source) には 実行権限の付与が必要:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

ひとまず touchwhich を定義:

$HOME\profile.ps1
Set-Alias touch New-Item
function which() {(Get-Command $args).Path}
  • 引数をともなう Alias の設定は function を使う。
  • 既存のコマンドの上書きはできない?

Windows 標準のターミナル

コマンドプロンプト
古の Microsoft 製 CUI
PowerShell
コマンドプロンプトの後継 (Windows7 以降)。
コマンドプロンプトで使えたコマンドも基本的に使える。
Windows Terminal
コマンドプロンプト、PowerShell、bash (WSL 経由) など複数のコマンドラインシェルのホストアプリケーション。
WinXI/A(管理者として実行)
Ctrl,で設定画面。 デフォルトのプロファイルや外観をいじれる。