PowerShellで特殊フォルダの一覧だったり、そのパスを取得する方法を毎回しらべている気がするのでまとめます。
.Net
ではSystem.Environment
クラスから特殊フォルダパスを取得する事ができるため、これを利用します。
ドキュメント
特殊フォルダの一覧を取得する
EnvironmentクラスではSpecialFolder列挙型に特殊フォルダの定数が格納されているので下記で表示できます。
[Environment+SpecialFolder].GetEnumNames()
ちなみにEnvironmentとSpecialFolderの区切り文字として+
を利用していますが、これは入れ子になっている内部クラスにアクセスする際の区切り文字が+
なためのようです。
特殊フォルダのフルパスを取得する
Environment.GetFolderPath メソッド
Environmentクラスに GetFolderPathメソッドがあり、このメソッドにEnvironment+SpecialFolder
を渡すとフルパスが取得できます。
[Environment]::GetFolderPath([Environment+SpecialFolder]::Windows)
すべての特殊フォルダのフルパスが取得したい場合は下記のように実行すれば取得できます。
[Environment+SpecialFolder].GetEnumNames() | Sort-Object | Select-Object @{Name="Name";Expression={$_}} , @{Name="Path";Expression={[Environment]::GetFolderPath($_)}}
参考
Why is a plus operator required in some Powershell type names?
Plus (+) in .NET Class Names
Explore Your [Environment]
PowerShellで入れ子のクラス(内部クラス)を示すには + を使う話
総評
毎回ぐぐっている気がするのでまとめました。
.NETクラスで+
って入れ子の内部クラスにアクセスするための文字でPowerShell
だと+
にしないと動かないというのは、そうなの? って感じがするところではあるかと思います。