よく忘れるので備忘録としてメモっておきます。
内容に関してはPowerShell Blogの以下の記事のままです。
PowerShellで入れ子のクラス(内部クラス)を示すには + を使う
PowerShell Blogの例ではNet.WebRequestMethods.Ftpクラスを使っているので本エントリでもそのまま使います。
ソースを見ればわかりますが、このクラスはNet.WebRequestMethods
クラスの内部クラスとして定義されています。
このクラスにPowerShellからアクセスする際は
[System.Net.WebRequestMethods.Ftp]
ではなく
[System.Net.WebRequestMethods+Ftp]
と+
を使ってアクセスする必要があります。
何故なのか?
PowerShellの仕様と言ってしまえばそれまでですが、これはリフレクションでの表記をそのまま使用しているとの事です。
例としてC#で以下のコードを呼び出すとFullName
はSystem.Net.WebRequestMethods+Ftp
となることがわかります。
// C# typeof(System.Net.WebRequestMethods.Ftp).FullName
LINQPadで確認した結果)
まとめ
とりあえずこんな感じです。
この点に関してはPowerShellが悪いというよりはC#(やVB.NET)がよしなにやってくれていると捉えたほうが良いかもしれません。
ちなみにNet.WebRequestMethods.Ftp
クラスの他にSystem.Environment.SpecialFolder
クラスも内部クラスだったりします。
私はこっちの方をよく使うので、今回もこのクラスでハマりました...