Windowsのバージョンごとに異なるスタートアップフォルダの位置。いずれも結構深いところにあってなかなか覚えづらいもの。
explorer.exeなら簡単
yubaさんのWindowsのあのフォルダはUNIX/Linuxで言えばあそこだによると、エクスプローラーのアドレスバーにshell:startup
と入力することでスタートアップフォルダに移動できるようです。
これを応用してPowerShell上でexplorer.exe shell:startup
と入力するとスタートアップフォルダに移動した状態のエクスプローラーが立ち上がります。
というかexplorer.exeは外部コマンドなのでcmd.exe上でも同じようにエクスプローラーを立ち上げることができます。
あるいはコマンドレットStart-Process shell:startup
でもエクスプローラーが立ち上がります。
…が、いずれにしてもエクスプローラーはGUIプログラムなので、その結果を利用しづらい。
レジストリを読む
エクスプローラーがCUIモードで動かせないか調べてみたんですが見つけられませんでしたので、アプローチを変えてみます。
エクスプローラーのshell:startup
コマンドはレジストリの内容からディレクトリ情報を得ているようです。レジストリであればGet-ItemProperty
コマンドレットで扱えますね。
対象ユーザーによってレジストリが異なります。
対象ユーザー | レジストリエントリ | キー |
---|---|---|
個別ユーザー | HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders | Startup |
個別ユーザー(バックアップ) | HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders | Startup |
全ユーザー | HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders | Common Startup |
全ユーザー(バックアップ) | HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders | Common Startup |
※それぞれバックアップはバックアップでないレジストリキーに値がない場合にバックアップとして参照されるエントリ
レジストリエントリには情報がいっぱい
今回はスタートアップフォルダだけわかればいいんですが、上記レジストリエントリには他にもいろいろな情報が詰まっています。(他のスタートメニュー関連やドキュメントフォルダ、デスクトップ等)
なので、$profile
で次のようにレジストリエントリのプロパティをコピーしておき、適宜キー名を指定してアクセスするとフォルダ名を参照することができます。
$UserProperty = $(Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders')
$SystemProperty = $(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders')
そのうえで例えばスタートアップフォルダを得たいのであれば、次のようにしましょう。
(*'-') >> $UserProperty.Startup
C:\Users\Home\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
(*'-') >> $SystemProperty.'Common Startup'
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
これで解決!