• #Windows
  • #PowerShell
  • #Stream Deck
  • #Windows Terminal
  • #Tips

Stream DeckでWindows Terminal(PowerShell 7)を任意のディレクトリで開く方法

問題

Stream DeckからPowerShell 7(pwsh.exe)を直接起動すると、Windows Terminalで設定した「開始ディレクトリ」が効かず、C:\Program Files\PowerShell\7\ で開いてしまう。

結論

Stream Deckでは pwsh.exe ではなく wt.exe(Windows Terminal)を起動する

C:\Users\<username>\AppData\Local\Microsoft\WindowsApps\wt.exe

または単に wt でもOK(PATHに入っている)。

背景:なぜこうなるのか

Windows Terminalの設定は Windows Terminal 経由でのみ有効

Windows Terminalの settings.json で設定した startingDirectory-WorkingDirectory は、Windows Terminal経由で起動した場合にのみ適用される。

pwsh.exe を直接起動すると、Windows Terminalの設定は完全に無視され、exeファイルの場所(C:\Program Files\PowerShell\7\)がカレントディレクトリになる。

トラブルシューティングの経緯

以下、試行錯誤の記録。同じ問題に遭遇した人の参考になれば。

1. Windows Terminalの「開始ディレクトリ」を設定(効かなかった)

Windows Terminal の設定 → PowerShell プロファイル → 開始ディレクトリ を設定。

C:\Users\numbe\Git_repo

結果: Windows Terminalから起動すれば効くが、Stream Deckからは効かない。

2. 「Windows PowerShell」と「PowerShell」の違いに気づく

Windows Terminalには2つの異なるPowerShellプロファイルがある:

プロファイル名バージョン実行ファイル
Windows PowerShell5.x(古い)%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
PowerShell7.x(新しい)C:\Program Files\PowerShell\7\pwsh.exe

最初、古い方(Windows PowerShell)の設定を変更していて、PowerShell 7には効いていなかった。

3. コマンドラインに -WorkingDirectory を追加

PowerShell 7のプロファイルで、コマンドラインを以下に変更:

"C:\Program Files\PowerShell\7\pwsh.exe" -WorkingDirectory "C:\Users\numbe\Git_repo"

結果: Windows Terminal内でタブを分割したときは効くが、最初のウィンドウには効かない。

4. source 行を削除

settings.json で PowerShell 7 のエントリに "source": "Windows.Terminal.PowershellCore" があると、自動検出の設定が優先されることがある。

この行を削除:

{
    "commandline": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -WorkingDirectory \"C:\\Users\\numbe\\Git_repo\"",
    "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
    "hidden": false,
    "name": "PowerShell",
    "startingDirectory": "C:\\Users\\numbe\\Git_repo"
}

5. 既定のプロファイルを PowerShell 7 に変更

スタートアップ設定で「既定のプロファイル」が「Windows PowerShell」(古い方)になっていた。

これを「PowerShell」(7の方)に変更。

結果: Windows Terminalからの起動は完璧に動作。しかしStream Deckからはまだダメ。

6. 根本原因の発見

Stream Deckの設定を確認すると:

"C:\Program Files\PowerShell\7\pwsh.exe"

pwsh.exe を直接起動していたため、Windows Terminalの設定が一切適用されていなかった。

最終的な解決策

Stream Deckの設定

変更前:

App/ファイル: "C:\Program Files\PowerShell\7\pwsh.exe"

変更後:

App/ファイル: C:\Users\numbe\AppData\Local\Microsoft\WindowsApps\wt.exe

引数でディレクトリを指定する方法(オプション)

特定のディレクトリを明示的に指定したい場合:

wt.exe -d "C:\Users\numbe\Git_repo"

特定のプロファイルとディレクトリを指定:

wt.exe -p "PowerShell" -d "C:\Users\numbe\Git_repo"

settings.json の最終形

参考までに、動作確認済みの settings.json(PowerShell 7 部分):

{
    "commandline": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -WorkingDirectory \"C:\\Users\\numbe\\Git_repo\"",
    "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
    "hidden": false,
    "name": "PowerShell",
    "startingDirectory": "C:\\Users\\numbe\\Git_repo"
}

source 行は削除済み。

まとめ

  • Windows Terminalの設定は、Windows Terminal経由で起動した場合にのみ有効
  • pwsh.exe を直接起動すると設定は無視される
  • Stream Deckなど外部ツールからは wt.exe を起動する
  • 「Windows PowerShell」(5.x)と「PowerShell」(7.x)は別のプロファイル