2013-03-23 11 views
7

In Windows Server 2008 è possibile rilevare a livello di programmazione funzionalità e ruoli del server utilizzando WMI e la classe Win32_ServerFeature.Rilevamento di quali ruoli del server sono installati su Windows Server 2012

In Windows Server 2012 la classe Win32_ServerFeature è stato deprecato e non includere caratteristiche e ruoli nuovi per il 2012.

Per quanto posso dire Win32_ServerFeature classe è stato sostituito da Server Manager Deployment e non ci sono esempi di come usalo

Ho una ricerca online e non riesco a trovare alcuna informazione su di esso oltre ai documenti che non aiutano.

Qualsiasi assistenza sarebbe apprezzata, sto sviluppando in C# in un'applicazione Net Framework 4,5 Dot.

risposta

8

Il modo in cui prenderei in considerazione l'idea è utilizzare uno script di PowerShell e quindi "giocare" con l'output in C#.

Se si aggiunge un riferimento alla seguente voce che si sarà in grado di interagire con gli script PowerShell in C#:

System.Management.Automation

quindi utilizzare i seguenti utilizzando dichiarazioni approfondire e interagire con le caratteristiche di questo:

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

Quanto segue script creerà un bel sub che avrà un comando di PowerShell e restituire una stringa leggibile, con ogni elemento (in questo caso, un ruolo), aggiunto come una nuova linea:

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

Poi si può passare il seguente comando PowerShell per la sceneggiatura e receieve l'uscita in questo modo:

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

In alternativa si può solo eseguire questo comando PowerShell da uno script C# e quindi leggere il file di testo di output da C# quando lo script ha terminato l'elaborazione:

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

Spero che questo aiuti!

+0

Sì. L'ho capito facilmente in PS. Sono tentato di rearchitect in realtà l'intera cosa e farlo in Powershell .. Presumendo che posso compilare fino a un file Exe .. –

+1

Sì, perché no! Con la procedura di cui sopra è possibile reindirizzare qualsiasi comando di PowerShell tramite C# e avere comunque l'opzione per una GUI piacevole, oltre alle opzioni per l'interazione con la rete/sistema operativo sono quasi infinite con PowerShell. Tutto ciò che non riesci a raggiungere con PowerShell, usi solo bit dispari di C#. Sono contento che abbia funzionato comunque! – chrismason954

Problemi correlati