Die Art und Weise, die ich in Betracht ziehen würde, ist die Verwendung eines PowerShell-Skripts und das anschließende "Spielen" mit der Ausgabe in C#.
Wenn Sie einen Verweis auf das folgende Element hinzufügen, können Sie mit PowerShell-Skripten in C# interagieren:
System.Management.Automation
Dann verwenden Sie Folgendes mit Anweisungen, um sich mit den Funktionen dieser Software vertraut zu machen:
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces
Mit dem folgenden Skript wird ein nettes Sub erstellt, das einen PowerShell-Befehl aufnimmt und eine lesbare Zeichenfolge zurückgibt, wobei jedes Element (in diesem Fall eine Rolle) als neue Zeile hinzugefügt wird:
private string RunScript(string scriptText)
{
// create a Powershell runspace then open it
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
// create a pipeline and add it to the text of the script
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(scriptText);
// format the output into a readable string, rather than using Get-Process
// and returning the system.diagnostic.process
pipeline.Commands.Add("Out-String");
// execute the script and close the runspace
Collection<psobject /> results = pipeline.Invoke();
runspace.Close();
// convert the script result into a single string
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
stringBuilder.AppendLine(obj.ToString());
}
return stringBuilder.ToString();
}
Dann können Sie den folgenden PowerShell-Befehl an das Skript übergeben und die Ausgabe wie folgt erhalten:
RunScript("Import-module servermanager | get-windowsfeature");
Alternativ könnten Sie diesen PowerShell-Befehl auch einfach von einem C#-Skript aus ausführen und dann die Ausgabetextdatei von C# lesen, wenn das Skript die Verarbeitung abgeschlossen hat:
import-module servermanager | get-windowsfeature > C:\output.txt
Ich hoffe, das hilft!