Ich bin neu in der Kombination von C# und Powershell, hoffe aber, eine Webseite zu erstellen, die Powershell im Backend nutzt. Mir ist klar, dass das, was ich mache, nur mit C# erledigt werden kann, aber ich möchte das für andere Anwendungen herausfinden.Powershell in C# Return-Befehlsausgabe
Im Wesentlichen nehme ich den Namen einer neuen Webanwendung aus einem Webformular und erhalte den Benutzernamen des authentifizierten Benutzers für die physische Pfadzuordnung.
Mein Powershell-Code funktioniert korrekt (auch wenn ich ihn direkt von Pipeline.Commands [0] kopiere), aber er scheint nichts zu tun, wenn ich ihn ausführe. Ich erhalte Parameterfehler in der Ergebnisvariablen, wenn ich eine erzwinge (zB: make -physicalpath ein nicht existierender Pfad), aber wenn alle Parameter korrekt sind, enthält das variable Ergebnis nur ein leeres Element.
Ich sehe viele ähnliche Fragen zu diesem, sehe aber keine definitive Antwort.
Scheint das wie ein C# - oder IIS Powershell-Modul Problem? Irgendwelche Ideen, wie ich mehr Informationen bekomme, kamen von meinem Befehl zurück?
protected void Button1_Click(object sender, System.EventArgs e)
{
String username = getUser();
String physicalPath = "S:\\WebSites\\" + username + "\\public_html\\" + TextBox1.Text;
// Create Powershell Runspace
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
// Create pipeline and add commands
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(
"Import-Module WebAdministration; set-psdebug -trace 1; " +
"New-WebApplication -Site MySite" +
" -Name " + TextBox1.Text +
" -PhysicalPath " + physicalPath +
" -ApplicationPool WebSites -Verbose -force");
pipeline.Commands.Add("Out-String");
// Execute Script
Collection<PSObject> results = new Collection<PSObject>();
try
{
results = pipeline.Invoke();
}
catch (Exception ex)
{
results.Add(new PSObject((object)ex.Message));
}
// Close runspace
runspace.Close();
//Script results to string
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
stringBuilder.AppendLine(obj.ToString());
}
}
Vielen Dank!
Danke Jaykul - ich werde das versuchen, wenn ich eine Chance bekomme und poste zurück. – user566175
@Jykul, Link funktioniert nicht. Ich brauche es jetzt nicht, aber andere Benutzer können von Informationen innerhalb der Antwort oder des aktualisierten Links profitieren. –
Ugh. Du würdest denken, dass die Verbindung zu meinem eigenen Blog sicher wäre, denn warum würde ich das hinnehmen? (lange Geschichte) ... jetzt ist der erste Absatz die Antwort. Der Link war nur ein zusätzlicher Hinweis (und etwas veraltet, weil PowerShell 4 und 5 die APIs weiter verbessert haben). – Jaykul