[C#] Powershell Skript mit Übergabeparametern ausführen

MrCastle

Mitglied
Hi community,

ich hoffe ich habe das richtige Unterforum erwischt...
Wie der Titel schon sagt versuche ich ein Powershell Skript aus C# aufzurufen, ohne Übergabeparameter funktioniert das auch gut, sobald aber welche dazukommen bekomme ich eine Exception (bei Zeile 20 im C# code), mit der ich leider nichts anfangen kann:

Ausnahme beim Festlegen von "WindowTitle": "Diese Funktion kann nicht aufgerufen werden, da sie vom aktuellen Host nicht implementiert wird."

Ergänzung: Ich benutze MS Visual Studio 2008, .Net FW 3.5

C# Code:

Code:
static void Main(string[] args)
        {
            Runspace runspace = RunspaceFactory.CreateRunspace();
            runspace.Open();

            Command myCommand = new Command("E:\\path\\test.ps1");
            CommandParameter param1 = new CommandParameter("vmname", "...");
            myCommand.Parameters.Add(param1);
            CommandParameter param2 = new CommandParameter("esxhost", "...");
            myCommand.Parameters.Add(param2);
            CommandParameter param3 = new CommandParameter("user", "...");
            myCommand.Parameters.Add(param3);
            CommandParameter param4 = new CommandParameter("pw", "...");
            myCommand.Parameters.Add(param4);

            Pipeline pipeline = runspace.CreatePipeline();
            pipeline.Commands.Add(myCommand);

            // Execute PowerShell script
            Collection<PSObject> result = pipeline.Invoke();

            runspace.Close();

        }

Powershell Code:

Code:
param($vmname,$esxhost,$user,$pw)

$err = 0

if($err -eq 0)
{
    # VM-copy preparation
    Add-PSSnapin VMware.VimAutomation.Core
    cd "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts"
    .\\Initialize-PowerCLIEnvironment.ps1
    Connect-VIServer -server $esxhost -User $user -Password $pw


    # Create new VM
    New-VM -name $vmname -vmhost $esxhost -memorymb 2048 #-diskmb 4000
}

Falls ihr evtl. eine Idee habt oder eine andere Lösung kennt die Parameter zu übergeben wäre ich sehr dankbar für jeglichen Input :)

Vielen Dank im Voraus

Gruß
MrCastle
 
Also, wie so oft: Stundenlang am suchen, im Forum fragen und danach direkt die Lösung finden...

Bei meinen weiteren Versuchen bin ich einen anderen Weg gegangen, indem ich nicht direkt das cmdlet aufgerufen habe, sondern eine extra powershell, bei der ich das Fenster einfach verstecke. Dachte mir nämlich schon, dass es irgendetwas mit der GUI zu tun hat.

Folgendes funktioniert:

Code:
static void runScriptblock()
        {
            try
            {
                RunspaceInvoke ri = new RunspaceInvoke();
                string script = "powershell.exe \"E:\\path\\test.ps1 -vmname name -esxhost host -user user -pw pw\" -Windowstyle hidden";
                string scriptBlockResult = ri.Invoke(script)[0].ToString();
                Console.WriteLine(scriptBlockResult);
            }

            finally
            {
                Console.WriteLine("Press any key to exit...");
                Console.ReadKey();
            }

        }

Trotzdem danke an alle, die sich daran versucht haben :)

Gruß
MrCastle
 

Neue Beiträge

Zurück