2014-07-15 62 views
1

如果我有一個我希望能夠直接調用的powershell腳本文件,稱爲Find-MyThing,我該如何向它添加一個函數以供它使用?如何將函數放入我想直接調用的Powershell腳本文件中?

基本上,我想寫一個這樣的文件:

Param(
[Parameter(ValueFromPipeline=$true)] 
    $ThingReference) 

process{ 
    $intermediateValue = DoSomeProcessing($ThingReference) 
    $finalValue = DoSomeMoreProcessing($intermediateValue) 
    return $finalValue 
} 

Function DoSomeProcessing($thing){...} 

Function DoSomeMoreProcessing($thing){...} 

但PowerShell不喜歡我具有該文件在一個單獨的功能。我可以將主要處理包含在函數中,但是無法從文件外部實際調用它。

這可能嗎?還是應該以完全不同的方式處理事情?

回答

3

找到了!

我可以把在開始塊的功能,並定義它們以備後用!

Param(
    [Parameter(ValueFromPipeline=$true)] 
    $ThingReference) 

begin{ 
Function DoSomeProcessing($thing){...} 

Function DoSomeMoreProcessing($thing){...} 
} 


process{ 
    $intermediateValue = DoSomeProcessing($ThingReference) 
    $finalValue = DoSomeMoreProcessing($intermediateValue) 
    return $finalValue 
} 
+2

他們不必在開始塊。他們只需在文件中的任何位置,然後再嘗試打電話給他們。 – EBGreen

+2

如果我把函數放在begin塊之外,那麼它將不會運行 - 它給了我一個錯誤: Get-Process:無法評估參數'Name',因爲它的參數被指定爲腳本塊並且沒有輸入。沒有輸入就無法評估腳本塊 。 –

+2

@EBGreen是錯誤的:如果你想使用過程塊(並聲明變量聲明爲綁定'ValueFromPipeline'你必須)而不是定義必須在'開始'塊。順便說一句:這是你的問題的答案,所以你應該把它標爲一個。我寫了一篇關於你前一段時間的錯誤的博客文章(http://becomelotr.wordpress.com/2011/10/25/begin-process-end/) – BartekB

相關問題