2013-02-01 45 views

回答

-2

做到這一點的一種方法是使用模塊。如果將所有擴展函數都放入某個具有特定名稱格式的文件夾中,則每個模塊都需要一個runBefore和一個runAfter函數。

在你PostPro.ps1腳本,你可以加載模塊是這樣的:

$modules = ls $(Join-Path $hookDir "postPro-extension-*.psm1") | 
    % { import-Module $_.FullName -AsCustomObject } 

這將加載所有在$ hookDir有看起來像postPro波及doSomething.psm1名的文件。每個模塊都將存儲在一個對象中,以便您訪問每個模塊功能。要運行這些函數,您可以在每個對象上調用它們,如下所示。

你可以去喜歡這個劇本

$modules | % { $_.runBefore } 

的主要部分之前,該腳本

$module | % { $_.runAfter } 
+0

有人可以解釋我如何可以回答OP?以及如何工作? –

+0

這是一個模糊的問題,所以我不確切地知道需求是什麼。但是這提供了一種在腳本之前和之後運行代碼而無需修改腳本本身的方法。 –

+0

檢查這一行:'$ modules = ls Join-Path $ hookDir「postPro-extension - *。psm1」',請 –

1

另一種方式與參數的主體部分後:
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