2013-03-23 4 views
7

В Windows Server 2008 вы можете программно определять серверные функции и роли с помощью WMI и класса Win32_ServerFeature.Определение того, какие роли сервера установлены на Windows Server 2012

В Windows Server 2012 класс Win32_ServerFeature устарел и не включает в себя функцию и роль новой к 2012 году

Насколько я могу сказать Win32_ServerFeature класса был заменить Server Manager Deployment и нет примеров того, как используй это.

У меня есть поиск в Интернете. Невозможно найти информацию об этом, кроме документов, которые не помогают.

Любая помощь была бы оценена, я разрабатываю в C# в приложении 4.5 Dot Net Framework.

ответ

8

Как я мог бы подумать, что это сделать, используя кусок скрипта PowerShell, а затем «играя» с выходом на C#.

Если добавить ссылку на следующий пункт вы будете иметь возможность взаимодействовать с помощью скриптов PowerShell в C#:

System.Management.Automation

Затем используйте следующие с помощью заявления для ознакомления и взаимодействия с особенностями этого:

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

Следующий скрипт создаст хороший сабвуфер, который будет принимать команду PowerShell и возвращает читаемую строку, с каждым элементом (в данном случае роль) добавляется в качестве новой линии:

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

Затем вы можете пройти следующие PowerShell команды к сценарию и receieve вывод так:

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

в качестве альтернативы можно просто запустить эту команду PowerShell из C# сценарий, а затем прочитать текстовый файл вывода из C#, когда скрипт закончит обработку:

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

Надеюсь, что это поможет!

+0

Да. Я понял это в PS довольно легко. Я соблазн фактически перестроить все это и сделать это в Powershell .. Предположим, я могу скомпилировать это до файла Exe .. –

+1

Да, почему бы и нет! С помощью вышеописанной процедуры вы можете передать любую команду PowerShell через C# и по-прежнему иметь возможность для удобного графического интерфейса, а также опции для взаимодействия с сетью/ОС почти бесконечны с PowerShell. Все, чего вы не можете достичь через PowerShell, вы просто используете нечетные биты C#. Я рад, что все это сработало! – chrismason954