2015-04-24 84 views
1

例如,我所擁有的一個(壞)想法是從文件中定義的字符串中導入模塊(我不知道是否可以在不首先將此字符串寫入文件系統的情況下執行此操作)我可以在Powershell ps1腳本中隱藏內部幫助器方法嗎?

我正在編寫一個腳本,我希望能夠遠程執行,並遵循this answer我正在使用「腳本方法」。但是,我想以某種方式隱藏某些功能 - 我想在腳本中使用某種模塊。

還是有一個完全不同的方法來做我想做的?我所有的腳本/模塊都是客戶端,我想在遠程PSSession中運行它們。我不特別想處理腳本複製到遠程服務器或共享驅動器。

我使用下面給點源我的腳本到遠程的PSSession:

invoke-command -Session $s -FilePath $p 

,然後調用腳本塊利用的腳本文件$p定義的函數。這是有效的,但我不認爲這適用於模塊,如果我想在其他腳本中重新使用代碼,我必須手動將每個代碼導入到遠程會話中,或者將代碼複製到單個單一腳本中。這兩者都不具吸引力,似乎也不允許隱藏「私人」方法。

+3

我想你已經塗上自己陷入了困境。如果所有腳本組件都將駐留在本地計算機上,則用戶必須能夠讀取它才能調用它。 – mjolinor

+0

@mjolinor - 我不明白爲什麼會這樣。例如。如果我有本地可讀的模塊文件,那麼當我導入模塊時,該模塊文件中的非導出方法仍然「隱藏」。這就是我的意思是「隱藏」 – Rob

+0

從Get-Help導入模塊:描述 Import-Module cmdlet將一個或多個模塊添加到當前會話。您導入的模塊必須安裝在本地計算機或遠程計算機上。 – mjolinor

回答

2

您可以使用New-Module的cmdlet:

New-Module { 
    function a { 
     b 
    } 
    function b { 
     'function b called' 
    } 
    Export-ModuleMember a 
}|Out-Null 
a #OK 
b #Error 
+0

完美!謝謝!如果我願意的話,將它傳遞給Import-Module讓我可以在以後刪除它 – Rob

相關問題