Moduleに含まれる Cmdlet を ScriptBlock に入れてごにょごよしたい。
そんな事をふと思ってやってみました。
役に経つかは微妙ですが、まぁ一応?
ModuleのCmdletってどういうこと
PowerShell Module には1つ以上のCmdlet が含まれます。
これらを ScriptBlockに入れて利用したり出来ないかなーという興味です。
ちなみにRemote Session先での CustomModule のImport-PSSessionについては、この辺が役に立ちます。
初めはこれをやろうと思って考えてたんですけどねー。
http://stackoverflow.com/questions/13502776/import-pssession-is-not-importing-cmdlets-when-used-in-a-custom-module
コード
こんな感じにすることで、 Moduleの内容を ScriptBlockに埋め込めます。
$module = "PSWindowsUpdate"
$PSWindowsUpdate = @{}
foreach ( $name in (Get-Command -Module $module).Name)
{
$cmdlet = $name.Replace("-","")
$definition = $(Get-Command -module $module | where name -eq $name).Definition
$PSWindowsUpdate.$cmdlet = [ScriptBlock]::Create($definition)
}
実行するときは & や . でスコープに応じてやってください。
HashTableに入っているので、モジュール名のプロパティを呼び出すだけにはなっています。
&$PSWindowsUpdate.GetWUList
問題点
paramを渡せないので、結構問題です。
正直ほげりました。
あと、com が remote session超えれないのとかは変わりませんよ。
Remote Session先にあるコマンドレットを叩くかんじにしても超えれないのでやり方を誰かご存じなら教えてほしいですー。
GitHub
https://github.com/guitarrapc/PowerShellUtil/blob/master/Convert-ModuleToScriptBlock/Convert%EF%BC%8DModuletoScriptBlock.ps1