简体   繁体   中英

c# how to import a powershell module from a string

I'm using c# and I want to use import-module to import a powershell script. However I don't want to have a .psm1 file on disk. I want to have it hardcoded on my code, like in a string and then import it.

Is that possible?

All the example I can find are something like:

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

or something like:

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

However as I said above I don't want to read a file from disk. I want it hardcoded to avoid multiple files. I want everything on an exe and that's it. I couldn't find a way, any help is appreciated.

The reason I want to use import-module is because after importing the module I want to do something like:

get-command -module <whatever>

and get a list of all its functions. Any other way to list functions from a script might be helpful too.

Thanks.

You're looking for New-Module ; it does exactly what you're asking for.

From the TechNet page (paraphrased):

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# Example (not tested):

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM