Windows Powershell で擬似的に open コマンドを使えるようにする
やりたいこと
macOS の Terminal 上で使える open
コマンドを、Windows でも使えるようにしたい
- 現在のディレクトリをエクスプローラで開く
- 例:
open .
- 例:
- 指定したパスのファイルを、関連付けているプログラムから開く
- 例:
open ./hoge.html
- 例:
アプローチ
open
コマンドは、PowerShell で考えるとInvoke-Item
が該当しそう- Powershell 上で
open
と叩いたら、Invoke-Item
が走るようにエイリアスを設定すればいいのでは?
思いつきでChatGPT(GPT-4)にやり方を聞いたら簡単そうだったのでやってみた。
使用するコマンド
Get-Alias
コマンド
-
PowerShell で設定されているエイリアスを一覧で確認できる
PS C:\Users\hi3103> Get-Alias CommandType Name Version Source ----------- ---- ------- ------ Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin Alias cat -> Get-Content Alias cd -> Set-Location Alias CFS -> ConvertFrom-String 3.1.0.0 Microsoft.PowerShell.Utility Alias chdir -> Set-Location Alias clc -> Clear-Content Alias clear -> Clear-Host Alias clhy -> Clear-History Alias cli -> Clear-Item Alias clp -> Clear-ItemProperty Alias cls -> Clear-Host Alias clv -> Clear-Variable Alias cnsn -> Connect-PSSession Alias compare -> Compare-Object Alias copy -> Copy-Item Alias cp -> Copy-Item Alias cpi -> Copy-Item Alias cpp -> Copy-ItemProperty Alias curl -> Invoke-WebRequest Alias cvpa -> Convert-Path Alias dbp -> Disable-PSBreakpoint Alias del -> Remove-Item Alias diff -> Compare-Object Alias dir -> Get-ChildItem Alias dnsn -> Disconnect-PSSession Alias ebp -> Enable-PSBreakpoint Alias echo -> Write-Output Alias epal -> Export-Alias Alias epcsv -> Export-Csv Alias epsn -> Export-PSSession Alias erase -> Remove-Item Alias etsn -> Enter-PSSession Alias exsn -> Exit-PSSession Alias fc -> Format-Custom Alias fhx -> Format-Hex 3.1.0.0 Microsoft.PowerShell.Utility Alias fl -> Format-List Alias foreach -> ForEach-Object Alias ft -> Format-Table Alias fw -> Format-Wide Alias gal -> Get-Alias Alias gbp -> Get-PSBreakpoint Alias gc -> Get-Content Alias gci -> Get-ChildItem Alias gcm -> Get-Command Alias gcs -> Get-PSCallStack Alias gdr -> Get-PSDrive Alias ghy -> Get-History Alias gi -> Get-Item Alias gjb -> Get-Job Alias gl -> Get-Location Alias gm -> Get-Member Alias gmo -> Get-Module Alias gp -> Get-ItemProperty Alias gps -> Get-Process Alias gpv -> Get-ItemPropertyValue Alias group -> Group-Object Alias gsn -> Get-PSSession Alias gsnp -> Get-PSSnapin Alias gsv -> Get-Service Alias gu -> Get-Unique Alias gv -> Get-Variable Alias gwmi -> Get-WmiObject Alias h -> Get-History Alias history -> Get-History Alias icm -> Invoke-Command Alias iex -> Invoke-Expression Alias ihy -> Invoke-History Alias ii -> Invoke-Item Alias ipal -> Import-Alias Alias ipcsv -> Import-Csv Alias ipmo -> Import-Module Alias ipsn -> Import-PSSession Alias irm -> Invoke-RestMethod Alias ise -> powershell_ise.exe Alias iwmi -> Invoke-WMIMethod Alias iwr -> Invoke-WebRequest Alias kill -> Stop-Process Alias lp -> Out-Printer Alias ls -> Get-ChildItem Alias man -> help Alias md -> mkdir Alias measure -> Measure-Object Alias mi -> Move-Item Alias mount -> New-PSDrive Alias move -> Move-Item Alias mp -> Move-ItemProperty Alias mv -> Move-Item Alias nal -> New-Alias Alias ndr -> New-PSDrive Alias ni -> New-Item Alias nmo -> New-Module Alias npssc -> New-PSSessionConfigurationFile Alias nsn -> New-PSSession Alias nv -> New-Variable Alias ogv -> Out-GridView Alias oh -> Out-Host Alias popd -> Pop-Location Alias ps -> Get-Process Alias pushd -> Push-Location Alias pwd -> Get-Location Alias r -> Invoke-History Alias rbp -> Remove-PSBreakpoint Alias rcjb -> Receive-Job Alias rcsn -> Receive-PSSession Alias rd -> Remove-Item Alias rdr -> Remove-PSDrive Alias ren -> Rename-Item Alias ri -> Remove-Item Alias rjb -> Remove-Job Alias rm -> Remove-Item Alias rmdir -> Remove-Item Alias rmo -> Remove-Module Alias rni -> Rename-Item Alias rnp -> Rename-ItemProperty Alias rp -> Remove-ItemProperty Alias rsn -> Remove-PSSession Alias rsnp -> Remove-PSSnapin Alias rujb -> Resume-Job Alias rv -> Remove-Variable Alias rvpa -> Resolve-Path Alias rwmi -> Remove-WMIObject Alias sajb -> Start-Job Alias sal -> Set-Alias Alias saps -> Start-Process Alias sasv -> Start-Service Alias sbp -> Set-PSBreakpoint Alias sc -> Set-Content Alias select -> Select-Object Alias set -> Set-Variable Alias shcm -> Show-Command Alias si -> Set-Item Alias sl -> Set-Location Alias sleep -> Start-Sleep Alias sls -> Select-String Alias sort -> Sort-Object Alias sp -> Set-ItemProperty Alias spjb -> Stop-Job Alias spps -> Stop-Process Alias spsv -> Stop-Service Alias start -> Start-Process Alias sujb -> Suspend-Job Alias sv -> Set-Variable Alias swmi -> Set-WMIInstance Alias tee -> Tee-Object Alias trcm -> Trace-Command Alias type -> Get-Content Alias wget -> Invoke-WebRequest Alias where -> Where-Object Alias wjb -> Wait-Job Alias write -> Write-Output
-
-Name
パラメータをつけると、指定したエイリアスのみ絞り込んで確認できるPS C:\Users\hi3103> Get-Alias -Name mv CommandType Name Version Source ----------- ---- ------- ------ Alias mv -> Move-Item
-
指定したエイリアスが存在しない場合はエラーが返ってくる
PS C:\Users\hi3103> Get-Alias -Name hoge Get-Alias : name 'hoge' を含むエイリアスは存在しないため、このコマンドは一致するエイリアスを見つけられません。 発生場所 行:1 文字:1 + Get-Alias -Name hoge + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (hoge:String) [Get-Alias], ItemNotFoundException + FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand
Set-Alias
コマンド
-
エイリアスを設定することができる
-
今回の目的である
open
を叩くとInvoke-Item
が走るようにする場合は以下を実行するSet-Alias -Name 'open' -Value Invoke-Item
-
ただし、これは実行したセッションでのみ有効な状態なので、終了するとまた使えなくなってしまう
-
永続的に利用するには PowerShell 用のプロファイルで設定しておく必要がある
PowerShell 用のプロファイルを設定する
-
プロファイルが存在するか
Test-Path
コマンドで確認するTest-Path $profile
-
False
が返ってきた場合、プロファイルが存在しないので、新たに作成するNew-Item -path $profile -type file -force
-
作成したプロファイルを「メモ帳」で開く
notepad.exe $profile
-
「メモ帳」で開いたファイルの中に、
Set-Alias
コマンドを記述し、永続的に利用したいエイリアスを設定する。今回は以下を記述。Set-Alias -Name 'open' -Value Invoke-Item
-
上書き保存して「メモ帳」を閉じる
-
PowerShell を再起動する(窓を閉じて開き直せばOK)
-
設定したエイリアスの存在を確認する
Get-Alias -Name 'open'
-
設定したエイリアスの動作を確認する
open .
上記を実行して現在のディレクトリがエクスプローラで立ち上がれば成功
参考
- 【 Invoke-Item 】コマンドレット――ファイルやフォルダを開く:Windows PowerShell基本Tips(5) – @IT
- プロファイルについて – PowerShell | Microsoft Learn
- Invoke-Item (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn
- Get-Alias (Microsoft.PowerShell.Utility) – PowerShell | Microsoft Learn
- Set-Alias (Microsoft.PowerShell.Utility) – PowerShell | Microsoft Learn