将 PowerShell 参数传递给 Process.Start

Posted

技术标签:

【中文标题】将 PowerShell 参数传递给 Process.Start【英文标题】:Pass PowerShell arguments to Process.Start 【发布时间】:2019-02-09 18:18:14 【问题描述】:

我正在尝试将我的一些 bat 脚本转换为 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 命令中有很多参数。

有没有更简单的方法来做到这一点?还是我只是缺少一些简单的东西?

【问题讨论】:

如果已经将代码转换为 C#,为什么不使用 C# 类来执行相同的操作? docs.microsoft.com/en-us/dotnet/api/…祝你好运! 【参考方案1】:

在您原来的 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'; "' 不是内部或外部命令, @Robert Harvey♦ 原来的Command& 之前有一个双引号,不应该将\" 插入到& 之前,而不是放在它之后? @pnadalini:已修复。 谢谢!! .. powershell 命令现在实际上正在运行.. 但现在尝试定义 -Machine 参数时出现问题。它似乎忽略了域\机器中的 \ .. 我猜你也必须将反斜杠加倍:domain\\server

以上是关于将 PowerShell 参数传递给 Process.Start的主要内容,如果未能解决你的问题,请参考以下文章

如何将开关参数传递给另一个 PowerShell 脚本?

如何将多个字符串参数传递给 PowerShell 脚本?

从 powershell.exe 将参数传递给脚本

如何使用 Terraform local-exec 将命名参数传递给 powershell 脚本?

将多个参数传递给Powershell中的函数变量[重复]

如何将命令行参数传递给 PowerShell ps1 文件