我有一个名为 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
一种方法是使用模块。如果你把你所有的扩展函数都放在某个文件夹中的某个模块中,以某种名称格式,那么每个模块都需要一个runBefore和一个runAfter函数。
在 PostPro.ps1 脚本中,您可以像这样加载模块:
$modules = ls $(Join-Path $hookDir "postPro-extension-*.psm1") |
% { import-Module $_.FullName -AsCustomObject }
这将加载 $hookDir 中所有名称类似于 postPro-extension-doSomething.psm1 的文件。每个模块都将存储在一个对象中,使您可以访问每个模块的功能。要运行这些函数,您可以在每个对象上调用它们,如下所示。
您可以在脚本的主要部分之前像这样
$modules | % { $_.runBefore }
这在脚本的主要部分之后
$module | % { $_.runAfter }