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 用のプロファイルを設定する

  1. プロファイルが存在するか Test-Path コマンドで確認する

    Test-Path $profile
  2. False が返ってきた場合、プロファイルが存在しないので、新たに作成する

    New-Item -path $profile -type file -force
  3. 作成したプロファイルを「メモ帳」で開く

    notepad.exe $profile
  4. 「メモ帳」で開いたファイルの中に、 Set-Alias コマンドを記述し、永続的に利用したいエイリアスを設定する。今回は以下を記述。

    Set-Alias -Name 'open' -Value Invoke-Item

  5. 上書き保存して「メモ帳」を閉じる

  6. PowerShell を再起動する(窓を閉じて開き直せばOK)

  7. 設定したエイリアスの存在を確認する

    Get-Alias -Name 'open'
  8. 設定したエイリアスの動作を確認する

    open .

    上記を実行して現在のディレクトリがエクスプローラで立ち上がれば成功

参考

Comments

  • スパム対策のため、コメント本文にURLが含まれている場合は「承認待ち」となり、すぐに投稿が反映されません。ご了承ください。
  • 公序良俗に反する内容、個人が特定できる情報、スパム投稿と思われるコメント等については、予告なく編集・削除する場合があります。