2016-05-23 21 views
2

我正在使用c#,我想使用導入模塊導入PowerShell腳本。但是我不想在磁盤上有一個.psm1文件。我想讓它在我的代碼上硬編碼,就像在一個字符串中,然後導入它。c#如何從字符串導入powershell模塊

這可能嗎?

所有我能找到的例子是這樣的:

pipeline.Commands.Add("Import-Module"); 
var command = pipeline.Commands[0]; 
command.Parameters.Add("Name", @"G:\PowerShell\PowerDbg.psm1") 

或類似的東西:

var ps = PowerShell.Create(myRS); 
ps.Commands.AddCommand("Import-Module").AddArgument(@"g:\...\PowerDbg.psm1") 
ps.Invoke() 

不過正如我上面說我不想從磁盤讀取的文件。我想硬編碼避免多個文件。我想要一個exe的一切,就是這樣。我無法找到方法,任何幫助表示讚賞。

我想用進口模塊的原因是因爲導入模塊後,我想要做的事,如:

get-command -module <whatever> 

,並獲得其所有的功能列表。 從腳本列出函數的任何其他方式也可能有幫助。

感謝。

+1

有點相關 - 檢查出['PSExt'爲WinDbg中](HTTPS:// github上.com/powercode/PSExt)如果你正在尋找自動化WinDbg –

+0

對不起,PowerDbg只是我複製從另一篇文章粘貼的隨機例子。不管怎麼說,還是要謝謝你。 – flexow

回答

3

您正在尋找New-Module;它完全符合你的要求。

從在TechNet頁(轉述):

New-Module -ScriptBlock { 
    $SayHelloHelp="Type 'SayHello', a space, and a name." 
    function SayHello ($name) { 
     "Hello, $name" 
    } 
    Export-ModuleMember -function SayHello -Variable SayHelloHelp 
} -Name PowerDbg 

C#實施例(未測試):

string moduleContents = @"..."; 
pipeline.Commands.Add("New-Module"); 
var command = pipeline.Commands[0]; 
command.Parameters.Add("ScriptBlock", moduleContents); 
command.Parameters.Add("Name", "PowerDbg"); 
pipeline.Invoke(); 
+0

太棒了!該c#示例不起作用,但我會解決它。新模塊似乎正是我需要的。謝謝。 – flexow