2013-03-23 8 views
7

W systemie Windows Server 2008 można programowo wykryć funkcje i role serwera za pomocą usługi WMI i klasy Win32_ServerFeature.Wykrywanie ról serwera zainstalowanych w systemie Windows Server 2012

W systemie Windows Server 2012 klasa Win32_ServerFeature jest przestarzała i nie obejmuje funkcje i role nowych do 2012.

O ile mogę powiedzieć Win32_ServerFeature klasa została zastąpić Server Manager Deployment i nie ma żadnych przykładów, w jaki sposób Użyj tego.

Mam wyszukiwania online i nie można znaleźć żadnych informacji na ten temat innych niż dokumenty, które nie są pomocne.

Każda pomoc byłaby doceniona, rozwijam się w języku C# w aplikacji 4.5 Dot Net Framework.

Odpowiedz

8

Sposób, w jaki chciałbym to zrobić, to użycie fragmentu skryptu PowerShell, a następnie "gra" z wynikiem w języku C#.

Jeśli dodać odniesienie do następnego elementu będzie w stanie współdziałać z skryptów PowerShell w C#:

System.Management.Automation

Następnie użyj następujących użyciu sprawozdań zagłębiać się w funkcje tego elementu i współdziałać z nimi:

using System.Collections.ObjectModel; 
using System.Management.Automation; 
using System.Management.Automation.Runspaces 

Następujące Skrypt tworzy piękny sub, który zaprowadzi polecenia PowerShell i powrotu czytelny napis, z każdej pozycji (w tym przypadku rola) dodaje się jako nowy wiersz:

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(); 
} 

Następnie można przejść następujące polecenia PowerShell do skryptu i receieve wyjście tak:

RunScript("Import-module servermanager | get-windowsfeature"); 

Alternatywnie można po prostu uruchomić tego polecenia PowerShell ze skryptu C# a następnie odczytać plik tekstowy wyjściowy z C#, gdy skrypt zakończy przetwarzanie:

import-module servermanager | get-windowsfeature > C:\output.txt 

Mam nadzieję, że to pomoże!

+0

Tak. Zrozumiałem to w PS dość łatwo. Kusi mnie fakt, że mogę dokonać rearchitekcji całości i zrobić to w Powershell ... Zakładając, że mogę skompilować to do pliku Exe .. –

+1

Tak, dlaczego nie! Dzięki powyższej procedurze możesz potokować dowolne polecenie PowerShell za pośrednictwem języka C# i nadal mieć opcję dobrego GUI, a opcje interakcji z siecią/systemem operacyjnym są prawie nieograniczone dzięki PowerShell. Wszystko, co możesz osiągnąć za pomocą PowerShell, po prostu użyj nieparzystych bitów C#. Cieszę się, że to zadziałało! – chrismason954

Powiązane problemy