c# 如何从字符串导入powershell模块

fle*_*xow 2 c# powershell

我正在使用 c#,我想使用 import-module 导入 powershell 脚本。但是我不想在磁盘上有 .psm1 文件。我想将它硬编码在我的代码中,就像在字符串中一样,然后导入它。

那可能吗?

我能找到的所有例子都是这样的:

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

或类似的东西:

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

然而,正如我上面所说,我不想从磁盘读取文件。我希望它被硬编码以避免多个文件。我想要 exe 上的所有内容,仅此而已。我找不到方法,非常感谢任何帮助。

我想使用 import-module 的原因是因为导入模块后我想做类似的事情:

get-command -module <whatever>
Run Code Online (Sandbox Code Playgroud)

并获取其所有功能的列表。列出脚本中的函数的任何其他方法也可能会有所帮助。

谢谢。

bri*_*ist 5

您正在寻找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
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)