私は PostPro.ps1 という PowerShell スクリプトを持っています。必要に応じて、PostPro.ps1 スクリプトの実行前後に機能を追加できるように、このスクリプトにフックアップを提供したいと考えています。
よろしくお願いします。
ラマニ
私は PostPro.ps1 という PowerShell スクリプトを持っています。必要に応じて、PostPro.ps1 スクリプトの実行前後に機能を追加できるように、このスクリプトにフックアップを提供したいと考えています。
よろしくお願いします。
ラマニ
パラメータを使用した別の方法:
postpro.ps1:
[CmdletBinding()]
Param(
[ScriptBlock]$before,
[ScriptBlock]$after
)
if($before -ne $null){
Invoke-Command $before
}
write-host "hello"
if($after -ne $null){
Invoke-Command $after
}
次に、実行するスクリプトを提供できます。
$b={write-host "before"}
$a={write-host 'after' }
PS>.\postpro.ps1 -before $b -after $a
before
hello
after
これを行う 1 つの方法は、モジュールを使用することです。すべての拡張関数をモジュール内の特定の名前形式の特定のフォルダーに配置すると、各モジュールに runBefore および runAfter 関数が必要になります。
PostPro.ps1 スクリプトでは、次のようにモジュールをロードできます。
$modules = ls $(Join-Path $hookDir "postPro-extension-*.psm1") |
% { import-Module $_.FullName -AsCustomObject }
これにより、postPro-extension-doSomething.psm1 のような名前を持つ $hookDir 内のすべてのファイルが読み込まれます。各モジュールは、各モジュールの機能にアクセスできるオブジェクトに格納されます。関数を実行するには、以下に示すように、各オブジェクトで関数を呼び出すだけです。
スクリプトの主要部分の前に、このようにすることができます
$modules | % { $_.runBefore }
これはスクリプトの主要部分の後にあります
$module | % { $_.runAfter }