Mit Powershell in C# neue Dienste anlegen

Derzeit bin ich damit beschäftigt das C#/Powershell-Projekt für NAV-Services des MS Dynamics NAV Team Blog’s für mich anzupassen und zu erweitern.
(http://blogs.msdn.com/b/nav/archive/2011/09/19/using-powershell-to-configure-dynamics-nav-services.aspx)

Während einiges schnell umgesetzt werden kann, hat sich das Anlegen von Diensten, gerade über Remote-Zugriffe als nicht so trivial erwiesen. Das Hauptproblem für mich war das ich keine Beispiele online finden konnte. 😉
Nach einigen Tagen suchen und testen habe ich es mit wenigen Zeilen Code geschafft. (Dieser Codeschnipsel ist Teil des oben verlinkten Projektes, alle nicht hier definierten Objekte sind dort zu finden)

private void btn_CreateService_Click(object sender, EventArgs e)
{
    string StartType = "Manual";
    string DefinitionScript = "$service = [wmiclass]('\\" + ComputerName + @"\ROOT\CIMV2:Win32_Service')";
    string Script = "$service.Create("+txtName.Text+","+txtDisplay.Text+","+txt_ApplicationPath.Text+",16,0,"+StartType+",'false')";

    using (Runspace runSpace = RunspaceFactory.CreateRunspace())
    {
        runSpace.Open();
        Pipeline pipeLine = runSpace.CreatePipeline();
        pipeLine.Commands.AddScript(DefinitionScript);
        pipeLine.Commands.AddScript(Script);
        pipeLine.Invoke();
    }
}

Schaut euch diesen MSDN-Artikel für eine Definition der Parameter und weitere Starttypen an.