2014-03-25 51 views
0

我已經寫編譯的模塊(在C#編寫即PS模塊),其中一個指定的DLL作爲清單中的RootModule,我已經寫腳本的模塊(寫在PowerShell的PS模塊),其中一個指定.psm1文件爲RootModule,但是是否可以包含這兩個類型的cmdlet?單個模塊?在單個模塊中腳本化的cmdlet和編譯的cmdlet?

作爲一種臨時措施(雖然我正在開發一些新代碼),我將我的DLL指定爲RootModule,並在ScriptsToProcess中列出了我的腳本cmdlet。這使所有cmdlet都可訪問,但不正確,因爲Get-Command -module MyModule僅列出來自RootModule的cmdlet,正如人們所期望的那樣。

回答

0

當然,我們這樣做的,像這樣的PowerShell社區擴展:

RootModule   = 'Pscx.psm1' 
NestedModules  = 'Pscx.dll'  
+0

這是有道理的......只有一個問題,基思:有沒有理由,更喜歡的名爲.psm1爲根和。 DLL爲嵌套? –

+0

我不認爲這很重要,除非你想在進口時做一些處理。我們在導入時在pscx.psm1中執行一些處理。我們檢查一個配置文件以確定用戶想要加載的嵌套模塊,然後在這些psm1文件上執行導入模塊。 –

+0

實際上,我發現它對於我的用例很重要:需要加載一些編譯的cmdlet(來自dll)和一些腳本化的cmdlet(來自psm1)。如果我將'RootModule'設置爲dll和'NestedModules'到psm1,那麼'gcm -module MyModule'會按預期列出_all_ cmdlet,一些指定的Function和一些指定的CommandType的Cmdlet。如果我簡單地交換兩個屬性分配並重新加載模塊,那麼_only_腳本化的cmdlet加載(Function CommandType)。您在PSCX清單中沒有這種情況,所以您不會看到問題。儘管如此,謝謝你讓我走! –