9 Stimmen

Erkennen, welche Server-Rollen auf Windows Server 2012 installiert sind

In Windows Server 2008 konnten Sie Serverfunktionen und -rollen mithilfe von WMI und der Klasse Win32_ServerFeature programmatisch erkennen.

In Windows Server 2012 ist die Klasse Win32_ServerFeature veraltet und enthält keine neuen Funktionen und Rollen für 2012.

Soweit ich das beurteilen kann Win32_ServerFeature Klasse wurde ersetzt durch Server Manager-Bereitstellung und es gibt keine Beispiele dafür, wie sie zu verwenden ist.

Ich habe online gesucht und kann keine anderen Informationen dazu finden als die Dokumente, die keine Hilfe sind.

Jede Hilfe würde geschätzt werden, ich entwickle in c# in einem 4.5 Dot Net Framework Anwendung.

9voto

chrismason954 Punkte 315

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!

1voto

Kirill Lutcenko Punkte 349

Ich würde Ihnen eher empfehlen, die Windows-Registrierung zu überprüfen. Zum Beispiel können Sie für Komponenten des IIS prüfen HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components Ordner

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X