Как я мог бы подумать, что это сделать, используя кусок скрипта 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
Надеюсь, что это поможет!
Да. Я понял это в PS довольно легко. Я соблазн фактически перестроить все это и сделать это в Powershell .. Предположим, я могу скомпилировать это до файла Exe .. –
Да, почему бы и нет! С помощью вышеописанной процедуры вы можете передать любую команду PowerShell через C# и по-прежнему иметь возможность для удобного графического интерфейса, а также опции для взаимодействия с сетью/ОС почти бесконечны с PowerShell. Все, чего вы не можете достичь через PowerShell, вы просто используете нечетные биты C#. Я рад, что все это сработало! – chrismason954