Используя Windows 10, я создаю собственную программу на C# для взаимодействия со сценариями PowerShell. Я использую Quest Active Roles, поэтому он будет использоваться более чем в одном домене. Короче говоря, я хочу иметь поле «домен \ пользователь», в которое пользователь может вводить данные. Я хочу, чтобы эта строка затем перешла к сценарию Power Shell, который запускает такие вещи, как:
Set-Qaduser 'domain\user' -Description $null
Я хочу, чтобы данные, помещенные в мою программу C#, были вставлены в сценарий PowerShell в правильном месте, где в настоящее время находится «домен \ пользователь».
Мой первый вопрос: Как вызвать сценарий PowerShell для запуска с использованием данных из программы C#? У меня есть права локального администратора и возможность создавать и изменять любой сценарий PowerShell, который мне может понадобиться для этого.
Мой второй вопрос: Возможно ли что-то подобное? Я знаю, что могу вызвать сценарий для запуска через C#, но возможно ли вообще получить ввод с C# и вставить его в сценарий PowerShell?
Спасибо вам всем и каждому за ваше время и изучение этого вопроса. Я не только новичок в C#, но и в PowerShell. Любые советы приветствуются. Я не боюсь читать МНОГО текста. Пожалуйста, благословите меня своими знаниями, O Сообщество переполнения стека.
Думаю, самый простой подход - запустить ваш скрипт PS, как и любую другую программу, - как отдельный процесс с необходимыми параметрами, переданными в качестве аргументов командной строки. Или, если это не помогает вашей лодке, и вы ищете что-то более способное / сложное / продуманное, вы можете изучить хостинг Powershell в своей программе (см. Здесь: msdn.microsoft.com/en-us/library/ee706563.aspx)
Размещение среды выполнения PowerShell в вашем процессе, вероятно, является для вас наиболее эффективным решением. Таким образом, вы можете передавать произвольные объекты командам PowerShell, не беспокоясь о потере точности, передавая их в виде строки. Взгляните на Краткое руководство по узлу Windows PowerShell, и вы увидите, насколько легко использовать API. На самом базовом уровне вы могли бы написать что-нибудь вроде
var ps = PowerShell.Create().AddCommand("Get-Process").
AddParameter("Name", "Notepad*");
foreach (dynamic proc in ps.Invoke())
{
proc.Kill();
}
который убьет все ваши процессы блокнота :-)
Брюс, я считаю это фантастическим. Это не совсем то, на что я надеялся, но я думаю, что это будет гораздо лучший способ делать то, что я хочу делать. Большое спасибо за помощь.
я думаю, что да.