Передать аргументы PowerShell в Process.Start - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь преобразовать некоторые из моих сценариев с битами в C #. Я перенес всю программу за исключением строки выполнения PowerShell.

Для простоты я пытался просто вызвать команду PowerShell из cmd. Я могу это сделать, но он не принимает сложные аргументы и параметры, которые соответствуют команде PowerShell.

Вот команда, если я запускаю напрямую из файла cmd или bat.

powershell -Command "& {asnp 'citrix*'; remove-BrokerTag -Name 'Somename' -Machine 'domain\server' -AdminAddress 'SomeServer';}"

Я использовал этот код для вызова cmd и запуска команды powershell.

string strCmdText;
strCmdText = "'/C powershell " + "-Command " + "&" + " { asnp 'citrix*'; add - BrokerTag - Name 'Somename' - Machine 'domain\server'" + (listboxvariable) + " - AdminAddress 'ServerXX'; }'" + " & pause";
System.Diagnostics.Process.Start("CMD.exe", strCmdText);

Я получаю эту ошибку "Невозможно обработать команду из-за отсутствующего параметра. Команда должна следовать за командой."

Как видите, в этой команде PowerShell много аргументов.

Есть ли более простой способ сделать это? или я просто упускаю что-то простое?

1 Ответ

0 голосов
/ 04 сентября 2018

В исходной строке PowerShell Command заключено в двойные кавычки.

Попробуйте это:

strCmdText = "/C powershell " + "-Command " + "\"& " + "{ asnp 'citrix*'; add - BrokerTag - Name 'Somename' - Machine 'domain\server'" + (listboxvariable) + " - AdminAddress 'ServerXX'; }\"" + " & pause";

Обратите внимание на использование \" escape-последовательностей для добавления пропущенных двойных кавычек, присутствующих в исходной командной строке.

...