PSProvider出来た!

とりあえず動くようになりました。ソースは id:ps1:20000101:1204560447、一緒に使う、書式指定ファイルはid:ps1:20000102:1204561784です。
現在読み込んでるAssemblyからリフレクションで型情報を全部持ってきて名前空間とクラスをディレクトリ、メソッド、プロパティ等をファイルみたいにして扱えます。もちろん、扱えるといっても動的にクラスを追加したりメソッドを削除したり出来るわけではなく、見るだけですが……。
有効な使い方は特に思いつかないですけど、ls -rで再帰的にメソッドの情報までとりにいけるので、あるNamespace以下のメソッドで返り値が特定のもの、を探したりとか、メソッドの戻り値の型とシグネチャが見れるんでなんでMSDNのドキュメントにはシグネチャが出てこないのか、と思っている人は使えるかもしれません。
動かすとこんな感じです。


AppDomain:\System\Linq\Expressions > ls


Location:: AppDomainSnapIn\AppDomain::System\Linq\Expressions

Name Type Definition
---- ---- ----------
BinaryExpression Type System.Linq.Expressions.BinaryExpression
ConditionalExpression Type System.Linq.Expressions.ConditionalExpression
ConstantExpression Type System.Linq.Expressions.ConstantExpression
ElementInit Type System.Linq.Expressions.ElementInit
Error Type System.Linq.Expressions.Error
Expression Type System.Linq.Expressions.Expression
Expression`1 Type System.Linq.Expressions.Expression`1
ExpressionCompiler Type System.Linq.Expressions.ExpressionCompiler
ExpressionType Type System.Linq.Expressions.ExpressionType
ExpressionVisitor Type System.Linq.Expressions.ExpressionVisitor
InvocationExpression Type System.Linq.Expressions.InvocationExpression
LambdaExpression Type System.Linq.Expressions.LambdaExpression
ListInitExpression Type System.Linq.Expressions.ListInitExpression
MemberAssignment Type System.Linq.Expressions.MemberAssignment
MemberBinding Type System.Linq.Expressions.MemberBinding
MemberBindingType Type System.Linq.Expressions.MemberBindingType
MemberExpression Type System.Linq.Expressions.MemberExpression
MemberInitExpression Type System.Linq.Expressions.MemberInitExpression
MemberListBinding Type System.Linq.Expressions.MemberListBinding
MemberMemberBinding Type System.Linq.Expressions.MemberMemberBinding
MethodCallExpression Type System.Linq.Expressions.MethodCallExpression
NewArrayExpression Type System.Linq.Expressions.NewArrayExpression
NewExpression Type System.Linq.Expressions.NewExpression
ParameterExpression Type System.Linq.Expressions.ParameterExpression
ReadOnlyCollectionExtensions Type System.Linq.Expressions.ReadOnlyCollectionExtensions
SR Type System.Linq.Expressions.SR
SRCategoryAttribute Type System.Linq.Expressions.SRCategoryAttribute
SRDescriptionAttribute Type System.Linq.Expressions.SRDescriptionAttribute
Strings Type System.Linq.Expressions.Strings
TypeBinaryExpression Type System.Linq.Expressions.TypeBinaryExpression
UnaryExpression Type System.Linq.Expressions.UnaryExpression


AppDomain:\System\Linq\Expressions > cd Error
AppDomain:\System\Linq\Expressions\Error > ls


Location:: AppDomainSnapIn\AppDomain::System\Linq\Expressions\Error

Name Type Definition
---- ---- ----------
Equals Method Boolean Equals(System.Object)
GetHashCode Method Int32 GetHashCode()
GetType Method System.Type GetType()
ToString Method System.String ToString()


AppDomain:\System\Linq\Expressions\Error > C:\work\ps\ss.ps1
ちなみに、System.Linqは通常読み込まれていないので、

[System.Reflection.Assembly]::Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
としてから、New-PSDriveしています。
# New-PSDriveした時しかAssemblyの情報を抜いていないので、あとからLoadしても表示できません
PSDriveのソースでも特に必要ないのにLinq使ったりしてますが全然問題ないみたいなので、PowerShellはすごいなぁ。