powershell - 如何使用需要从命令提示符/批处理文件引用的参数来调用 PowerShell Start-Process 命令?

标签 powershell batch-file syntax quoting

我在 PowerShell 中尝试执行一个命令时收到此错误:

我正在尝试执行此命令:

powershell.exe Start-Process -FilePath "C:\Windows\System32\attrib +h +s "%CD%"" -Verb runAs

有人可以帮我弄清楚为什么会发生这种情况以及如何解决吗?

最佳答案

Can someone please help me figure out why this is happening?

Start-Process cmdlet 的 -FilePath 参数需要可执行文件本身的名称或路径,而不是 >整个命令行

传递给通过-FilePath指定的可执行文件的参数必须单独作为数组传递,通过 -ArgumentList (-Args) 参数。

cmd.exe(批处理文件)调用时,在单个 中传递要由 PowerShell 评估的整个命令行在概念上更清晰“-封闭的参数:

powershell.exe -Command "Start-Process -Verb RunAs -FilePath attrib.exe -Args +h, +s, '\"%CD%\"'"

请注意,需要双重转义 %CD% 值,首先为了 PowerShell 将其括在 ' 中,然后再将其括起来其中的 \" :外部 ' 确保 PowerShell 本身将该值识别为单个参数,嵌入的 \" 引号确保最终目标程序 attrib.exe 也将该值视为单个参数。

这种双重转义的需要是不幸的,并且不应该是必要的 - 它在this GitHub issue中进行了讨论。 .

关于powershell - 如何使用需要从命令提示符/批处理文件引用的参数来调用 PowerShell Start-Process 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50900785/

相关文章:

javascript - 奇怪的 javascript 函数定义语法的文档? () => {}

sorting - 使用自定义排序表达式进行 Powershell 排序

powershell - Powershell:将管道发送为命令的参数

powershell - 比较多个文件夹的文件差异

windows - 在数组中查找变量 - 批处理

windows - 为什么 exit/b 从 Jenkins(但其他任何地方)调用时不能正常工作?

java - 如何在java中运行带有参数的批处理文件?

powershell - 如何将凭据传递给 Send-MailMessage 命令以发送电子邮件

batch-file - 结合 For/F 与 WMIC + WHERE 子句 + AND 子句

c - 了解特定 C 指针定义的学校作业