Functionプロバイダかっけえ

Functionプロバイダで存在する関数の情報にアクセスできる

たとえば、

> function Foo(){ "test" }

って関数を定義して、

> gci function: | ?{ $_.Name -eq "Foo" } | fl -property *

PSPath              : Microsoft.PowerShell.Core\Function::Foo
PSDrive             : Function
PSProvider          : Microsoft.PowerShell.Core\Function
PSIsContainer       : False
HelpUri             :
ScriptBlock         :  "test"
CmdletBinding       : False
DefaultParameterSet :
Definition          :  "test"
Options             : None
Description         :
Verb                :
Noun                :
HelpFile            :
OutputType          : {}
Name                : Foo
CommandType         : Function
Visibility          : Public
ModuleName          :
Module              :
RemotingCapability  : PowerShell
Parameters          : {}
ParameterSets       : {}

こうなる。

このgci、要はファイルシステムのlsコマンドと同じでしょと思ってたら、任意のプロバイダを想定してたのか。この抽象化面白い。

Aliasプロバイダ、Certificateプロバイダ(デジタル証明書?)、Environmentプロバイダ(環境変数)、FileSystemプロバイダ、
Functionプロバイダ、Registryプロバイダ、Variableプロバイダもあるよ!

FileSystemだと

PS E:\Documents > cd c:\hoge\fuga
PS C:\hoge\fuga >

とするのと同様、Registryプロバイダだと

PS E:\Documents > cd HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer
PS HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer>

こうできる。続けざまに、

PS HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer> gci | %{ $_.PSChildName }
Advanced
AppContract
AutoplayHandlers
BitBucket
CabinetState
...
VisualEffects
Wallpaper
Wallpapers
WordWheelQuery
SessionInfo

レジストリのサブキーを調べたり、

PS HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer> gp .
ExplorerStartupTraceRecorded : 1
ShellState                   : {36, 0, 0, 0...}
UserSignedIn                 : 1
SIDUpdatedOnLibraries        : 1
...
PSParentPath                 : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\Current
                               Version
PSChildName                  : Explorer
PSDrive                      : HKCU
PSProvider                   : Microsoft.PowerShell.Core\Registry

レジストリのエントリを調べたりできる