以下の内容はhttps://tech.guitarrapc.com/entry/2013/07/25/200747より取得しました。


PowerShell ModuleのコマンドレットをScriptBlockに格納する

Moduleに含まれるコマンドレットをScriptBlockに入れてごにょごよしたい。そんな事をふと思ってやってみました。

guitarrapc/PowerShellUtil - Convert-ModuleToScriptBlock/Convert-DModuletoScriptBlock.ps1 | GitHub

Moduleのコマンドレットってどういうこと

PowerShell Moduleには1つ以上のコマンドレットが含まれます。 これらをScriptBlockに入れて利用したり出来ないかなーという興味です。

ちなみにRemoteセッション先でモジュールを使えるようにするImport-PSSessionで役に立ちます。初めはこれをやろうと思って考えてたんですけどねー。

powershell - Import-Pssession is not importing cmdlets when used in a custom module - Stack Overflow

コード

モジュールの内容を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がリモートセッション超えられません。 リモートセッション先にあるコマンドレットを叩く手も、課題が残って悔しいです。




以上の内容はhttps://tech.guitarrapc.com/entry/2013/07/25/200747より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14