Help us understand the problem. What is going on with this article?

PowerShellでスタートアップフォルダにアクセスする

More than 5 years have passed since last update.

Windowsのバージョンごとに異なるスタートアップフォルダの位置。いずれも結構深いところにあってなかなか覚えづらいもの。

explorer.exeなら簡単

yubaさんのWindowsのあのフォルダはUNIX/Linuxで言えばあそこだによると、エクスプローラーのアドレスバーにshell:startupと入力することでスタートアップフォルダに移動できるようです。

Kobito.FIdnyb.png

これを応用して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

これで解決!

Takeru
いま勤めてる会社にはWindowsしかないから、遊ぼうと思ったらPowerShellを覚えないといけない。。。
http://takeru-chan.github.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away