将PowerShell参数传递给Process.Start

5

我正在尝试将一些批处理脚本转换成C#代码。 除了PowerShell执行行之外,我已经全部移植完成。

为了简化事情,我尝试只从cmd调用PowerShell命令。 我能够做到这一点,但它不能带有与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);

我收到了这个错误消息:"因为缺少参数,无法处理命令。必须跟随 -Command 参数"
如您所见,这条 PowerShell 命令中有很多参数。
是否有更简单的方法来执行此操作?或者我只是忽略了一些简单的东西?

2
如果已经将代码转换为C#,为什么不使用C#类来执行相同的操作呢?https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.powershell?view=powershellsdk-1.1.0 祝你好运! - Totem
1个回答

4
在您原始的PowerShell命令行中,Command被双引号包围。
尝试这个:
strCmdText = "/C powershell " + "-Command " + "\"& " + "{ asnp 'citrix*'; add - BrokerTag - Name 'Somename' - Machine 'domain\server'" + (listboxvariable) + " - AdminAddress 'ServerXX'; }\"" + " & pause";

请注意使用\"转义序列来添加原始命令行中缺失的双引号。

我得到了相同的错误。--> 由于缺少参数,无法处理该命令。必须跟随-Command命令。接着是 --> '"{ asnp 'citrix*'; add - BrokerTag - Name 'somename' - Machine 'domain'server - AdminAddress 'Server'; }"' 不被识别为内部或外部命令。 - Johnny Cakes
@Robert Harvey♦ 原始的 Command& 之前有一个双引号,难道不应该在 & 之前插入 \" 而不是在之后放置吗? - Pietro Nadalini
@pnadalini:已修复。 - Robert Harvey
谢谢!现在PowerShell命令实际上正在运行。但是,当尝试定义“-Machine”参数时出现问题。它似乎忽略了域\机器中的反斜杠。 - Johnny Cakes
我猜你也得在那里双倍反斜杠:domain\\server - Theo
谢谢大家,现在它可以工作了。单行PowerShell命令是给我带来很多问题的原因。基本上,我必须为每个PowerShell参数添加一个+号。感谢大家的帮助! - Johnny Cakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接