Kishan Bheemajiyani
Kishan Bheemajiyani

Reputation: 3439

Running the PowerShell Script from the c#

I am trying to call PowerShell ISE Script from the C#.

I have command that I am running it on the PowerShell

. .\Commands.ps1; Set-Product -bProduct 'Reg' -IPPoint 'ServerAddress' -Location  'testlocation' -Terminal 3

Now I am trying to create the Command with the c# I have wrote some code Like this.

//Set Execution Policy to un restrict
            powershell.AddCommand("Set-ExecutionPolicy");
            powershell.AddArgument("unrestricted");
            powershell.Invoke();
            powershell.Commands.Clear();

        

powershell.AddScript("K:\\Auto\\Cases\\Location\\Commands.ps1", false);
            powershell.AddArgument("Set-Product").AddParameter("bProduct ", "Reg").
                AddParameter("IPPoint", "ServerAddress").
                AddParameter("Location", "testlocation").AddParameter("Terminal", 3);

            powershell.Invoke();

I can see its running fine. But its not updating values in my xml file. It suppose to update my values in file. When I try to run it with powershell It does run and works file. But c# code does not work.

Any hint or clue will be appreciated.

Upvotes: 1

Views: 748

Answers (1)

marsze
marsze

Reputation: 17104

Mind the semicolon, so this is basically two statements:

1.) Dot-sourcing the script Commands.ps1

. .\Commands.ps1

2.) Invoking the cmdlet Set-Product

Set-Product -bProduct 'Reg' -IPPoint 'ServerAddress' -Location  'testlocation' -Terminal 3

So, you have to treat them as such. Also, AddScript expects code, not a file name.

powershell
    // dot-source the script
    .AddScript(@". 'K:\Auto\Cases\Location\Commands.ps1'")

    // this is the semicolon = add another statement
    .AddStatement()

    // add the cmdlet
    .AddCommand("Set-Product")
    .AddParameter("bProduct", "Reg")
    .AddParameter("IPPoint", "ServerAddress")
    .AddParameter("Location", "testlocation")
    .AddParameter("Terminal", 3)

    // invoke all statements
    .Invoke();

(Alternatively to AddStatement() you can of course split this up in two calls and call Invoke() twice.)

Upvotes: 5

Related Questions