PowerCLI

 View Only
  • 1.  Open PowerCli from C# and run Commands on PowerCli

    Posted Sep 25, 2012 07:21 AM

    Hi,

    I want to run commands in PowerCli in remote server from C#,

    So I need to open PowerCli in remote server from C#  

    I tried to run the below command but getting Connect-VIServer is not found as a cdmlt command.

    Please provide me the C# code to open PowerCli and run Connect on that Runspace.

    Connect-VIServer -Server 192.168.10.10 -Protocol http -User admin -Password sck9p84

    Code I used to run the command

    InitialSessionState initial = InitialSessionState

    .CreateDefault();

    initial.ImportPSModule(

    new[] {"abc"

    });

    // create Powershell runspace

    Runspace runspace = RunspaceFactory

    .CreateRunspace(initial);

    // open it

    runspace.Open();

    // create a pipeline and feed it the script text

    Pipeline

    pipeline = runspace.CreatePipeline();

    // Create Command to Set Na Option

    var access = new Command ("Connect-VIServer -Server 192.168.10.10 -Protocol http -User admin -Password sck9p84");

    // Add Command to Pipeline

    pipeline.Commands.Add(access);

    //Execute by invoking

    pipeline.Invoke();

    // close the runspace

    runspace.Close();

    }



  • 2.  RE: Open PowerCli from C# and run Commands on PowerCli

    Broadcom Employee
    Posted Sep 25, 2012 08:34 AM

    Hi,

    All you need to add in you snippet is to import PowerCLI snapin to the runspace:

    // create Powershell runspace
    RunspaceConfiguration config = RunspaceConfiguration.Create();
    Runspace runspace = RunspaceFactory.CreateRunspace(config);
    // open it
    runspace.Open();
    try {
        // import PowerCLI ViCore snapin

        PSSnapInException warning;
        config.AddPSSnapIn("VMware.VimAutomation.Core", out warning);
        if (warning != null) {
            throw warning;
        }
        // create a pipeline and feed it the script text
        Pipeline pipeline = runspace.CreatePipeline();
        // Create Command to Set Na Option

        var access = new Command ("Connect-VIServer -Server 192.168.10.10 -Protocol http -User admin -Password sck9p84");

        // Add Command to Pipeline
        pipeline.Commands.Add(access);
        //Execute by invoking
        pipeline.Invoke();        
    }finally {
        runspace.Close();
    }

    Regards,

    Yasen



  • 3.  RE: Open PowerCli from C# and run Commands on PowerCli

    Posted Sep 25, 2012 09:16 AM

    Hi  Yasen,

    Thank you very much for the answer, it resolved the issue but I need to import module

    Which I have done while creating Runspace but now how  can I import Module.

    // Imprt Requrie Modules

    InitialSessionState initial = InitialSessionState.CreateDefault();

    initial.ImportPSModule(

    new[] { "dtap" });

    Runspace runspace = RunspaceFactory.CreateRunspace(initial);

    Thanks

    Sireesh



  • 4.  RE: Open PowerCli from C# and run Commands on PowerCli

    Broadcom Employee
    Posted Sep 25, 2012 10:42 AM

    You can try calling  InitialSessionState.ImportPSSnapIn method after module import:

    PSSnapInException warning;

    InitialSessionState initial = InitialSessionState.CreateDefault();

    initial.ImportPSModule(new[] { "dtap" });

    initial.ImportPSSnapIn("VMware.VimAutomation.Core", out warning);



  • 5.  RE: Open PowerCli from C# and run Commands on PowerCli

    Posted Jun 05, 2015 04:47 PM

    HI,

    I have used your code and tried to connect to the vsphere server.

    But the pipeline.Invoke(); statement throws an exception saying

    System.Management.Automation.CommandNotFoundException was unhandled

      Message=The term 'Connect-VIServer -Server 172.17.21.51 -Protocol https -User vmuser -Password pass' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

      Source=System.Management.Automation

      WasThrownFromThrowStatement=false

      CommandName=Connect-VIServer -Server 172.17.21.51 -Protocol https -User vmuser -Password pass

      StackTrace:

           at System.Management.Automation.CommandDiscovery.LookupCommandInfo(String commandName, CommandOrigin commandOrigin)

           at System.Management.Automation.CommandDiscovery.LookupCommandProcessor(String commandName, CommandOrigin commandOrigin, Nullable`1 useLocalScope)

           at System.Management.Automation.CommandFactory._CreateCommand(String commandName, CommandOrigin commandOrigin, Nullable`1 useLocalScope)

           at System.Management.Automation.Runspaces.Command.CreateCommandProcessor(ExecutionContext executionContext, CommandFactory commandFactory, Boolean addToHistory)

           at System.Management.Automation.Runspaces.LocalPipeline.CreatePipelineProcessor()

           at System.Management.Automation.Runspaces.LocalPipeline.InvokeHelper()

           at System.Management.Automation.Runspaces.LocalPipeline.InvokeThreadProc()

      InnerException:

    Is there any prerequisite to run these powercli commands? Please help me to resolve this error.



  • 6.  RE: Open PowerCli from C# and run Commands on PowerCli

    Broadcom Employee
    Posted Jun 09, 2015 10:43 AM

    Which version of PowerCLI are you using? Since the latest version of PowerCLI (6.0R1) all snap-ins were converted to modules and you should import them with ImportPSModule instead of ImportPSSnapIn.



  • 7.  RE: Open PowerCli from C# and run Commands on PowerCli

    Posted Jun 09, 2015 08:07 PM

    hi,

    Im using Powercli 5.5 R1, The "config.AddPSSnapIn("VMware.VimAutomation.Core", out warning);" in the mentioned code

    is working fine without any exceptions. only the invoke command fails.

    Is "importPSSnapin" is also required before doing the "AddPSSnapin" ?

    Thanks.



  • 8.  RE: Open PowerCli from C# and run Commands on PowerCli

    Broadcom Employee
    Posted Jun 12, 2015 08:36 AM

    I think I figured it out. Try changing

    var access = new Command ("Connect-VIServer -Server 192.168.10.10 -Protocol http -User admin -Password sck9p84"); to

    var access = new Command ("Connect-VIServer -Server 192.168.10.10 -Protocol http -User admin -Password sck9p84", true);

    It seems like the default constructor does not take complete command with parameters, so you should either specify that or doing it like this

    var access = new Command ("Connect-VIServer);

    access.Parameters.Add("Server","192.168.10.10");

    access.Parameters.Add("Protocol","http"); etc.

    Kamen



  • 9.  RE: Open PowerCli from C# and run Commands on PowerCli

    Posted Jul 06, 2015 01:56 AM

    I am also having the same issue, getting (An exception of type 'System.Management.Automation.CommandNotFoundException' occurred in System.Management.Automation.dll but was not handled in user code)error message when i try to run the below mentioned code.

               InitialSessionState iss = InitialSessionState.CreateDefault();

               iss.ImportPSModule(new string[] { "VMware.VimAutomation.Cis.Core" });

               Runspace runSpace = RunspaceFactory.CreateRunspace(iss);

               runSpace.Open();

               Pipeline pipeLine = runSpace.CreatePipeline();

               var connectVI = new Command ("Connect-VIServer");

               connectVI.Parameters.Add("Server", "192.168.90.89");

               connectVI.Parameters.Add("Protocol", "http");

               connectVI.Parameters.Add("User", "vmuser");

               connectVI.Parameters.Add("Password", "**********");

               pipeLine.Commands.Add(connectVI);

               pipeLine.Commands.Add("Out-String");

               Collection<PSObject> resultObjects = pipeLine.Invoke();

               runSpace.Close();

    An exception of type 'System.Management.Automation.CommandNotFoundException' occurred in System.Management.Automation.dll but was not handled in user code

    Additional information: The term 'Connect-VIServer' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

    Any help in resolving this issue is highly appreciated.



  • 10.  RE: Open PowerCli from C# and run Commands on PowerCli

    Posted Jul 29, 2015 09:24 AM

    Hi,

    Am using the following code to Open PowerCli from C# and run commands on PowerCli through a button click.. after clicking the button in the debugger output am getting "The thread 0x104c has exited with code 259 (0x103)." which means my code was not succesfull .
    i dont know whats going wrong in my code can you please suggest me whats wrong am doing in my code?

    private void Powercli_Click(object sender, EventArgs e)

            {

                RunspaceConfiguration config = RunspaceConfiguration.Create();

                Runspace runspace = RunspaceFactory.CreateRunspace(config);

                // open it

                runspace.Open();

                try

                {

                    // import PowerCLI ViCore snapin

                    PSSnapInException warning;

                    config.AddPSSnapIn("VMware.VimAutomation.Core", out warning);

                    if (warning != null)

                    {

                        throw warning;

                    }

                    // create a pipeline and feed it the script text

                    Pipeline pipeline = runspace.CreatePipeline();

                    // Create Command to Set Na Option

                    var access = new Command("Connect-VIServer");

                    access.Parameters.Add("Server", "192.168.123.108");

                    access.Parameters.Add("Protocol", "https");

                    access.Parameters.Add("User", "root");

                    access.Parameters.Add("Password", "assign");

                  // Add Command to Pipeline 

                    pipeline.Commands.Add(access);

                    //Execute by invoking

                    pipeline.Invoke();

                }

                finally

                {

                    runspace.Close();

                }

            }