2013-03-13 22 views
1

我有一個腳本可以接受多個參數,並且已經通過適當的幫助評論(例如.SYNOPSIS,.DESCRIPTION,.PARAMETER)進行了記錄。我的組織中的幾個不同的用戶將使用這個PowerShell腳本,一些人知道PowerShell,並將使用特定的參數值從PowerShell中調用它,一些人不知道PowerShell,只需在Windows資源管理器中右鍵單擊腳本文件並選擇Run with PowerShell(所以參數將使用它們的默認值)。編寫等效PowerShell腳本和函數的最佳實踐

我的難題是什麼是在沒有大量重複代碼的情況下在PowerShell中執行此操作的最佳方法。我看到它的方式,這些是我的選擇:

1 - 只需編寫一個爲所有參數提供默認值的DoStuff.ps1腳本。這使得它可以直接從Windows資源管理器中運行,但感覺笨重對於想用它作爲自己的腳本功能PowerShell的用戶,因爲不是寫:

Do-Stuff param1 param1 

他們會做:

.\DoStuff.ps1 param1 param2 

2 - 在DoStuff.ps1中,將其執行的操作移動到DoStuff函數中,並且在函數聲明之後使用傳入腳本的參數調用DoStuff函數。這仍然允許從Windows資源管理器運行腳本,以及開發人員將腳本點到源自己的腳本,以便他們可以訪問該功能。缺點是,當開發人員點擊源腳本時,腳本將使用默認參數調用該函數(除非我們允許他們向觸發該函數的腳本提供可選的Switch參數)。儘管如此,這意味着我將不得不復制所有的腳本幫助文本,以便爲腳本和函數(描述,參數描述等)顯示。

我想不出任何其他選擇。理想情況下,我可以在.ps1文件中編寫函數,並使用「default」關鍵字標記函數,以便在調用腳本時默認運行該函數;但我不認爲PowerShell提供了這樣的東西。

您認爲在這種情況下最好的方法是什麼?有什麼我可以忽略或不知道的嗎?謝謝。

回答

3

但感覺笨重對於想用它作爲自己的腳本功能

默認參數似乎是,根據您的描述,是最好的(或至少PowerShell的用戶,最壞情況)的方法。

但是,而不是命名你的腳本DoStuff.ps1命名並調用它,所以它可以被稱爲更像是一個內部功能:Do-Stuff.ps1

  • 記住,你並不需要:

    • 與破折號名稱是指定ps1
    • 如果腳本位於$env:Path的文件夾中,則不需要指定路徑。

    另外考慮一個腳本可以從相對路徑加載模塊:您可以將大部分代碼放在腳本模塊的前端(右鍵單擊它)腳本加載並調用它。腳本作者自己加載模塊。