如何使用PowerShell以管理员身份运行带有参数的程序

时间:2018-10-21 12:48:36

标签: powershell cmd registry contextmenu

我有一个脚本,该脚本必须使用参数启动我的程序,是的,它在这里。

powershell.exe -Command "Start-Process -Verb RunAs -FilePath cmd.exe -Args /C, '\"%1\"'"

但是当我用自定义参数程序替换%1时,就不再想要了。 我将其替换为这些参数

takeown.exe /F "C:\Users\WobbyChip\Desktop\New folder" /R /D Y & icacls.exe "C:\Users\WobbyChip\Desktop\New folder" /grant Everyone:F /T

现在我的这个脚本不起作用了。

powershell.exe -Command "Start-Process -Verb RunAs -FilePath cmd.exe -Args /C, '\"takeown.exe /F "C:\Users\WobbyChip\Desktop\New folder" /R /D Y & icacls.exe "C:\Users\WobbyChip\Desktop\New folder" /grant Everyone:F /T\"'"

有关更多信息,我从注册表上下文菜单启动此脚本,它看起来像这样。但是从注册表或其他任何地方启动都没有区别。结果是一样的。

enter image description here

最有趣的是,我的“隐藏”脚本有效,但“权限”无效。这是隐藏脚本

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

有趣的是,当我尝试解决此问题时,我在CMD中收到此错误,但是我不知道这意味着什么以及如何解决。

enter image description here

1 个答案:

答案 0 :(得分:0)

嵌套的引用变得复杂,并且您的命令缺少对嵌入式"字符的正确转义。

尝试以下操作,这些操作应同时在cmd.exe和注册表中的上下文菜单命令定义中起作用:

powershell.exe -Command Start-Process -Verb RunAs cmd.exe -Args /C, 'takeown.exe /F \"C:\Users\WobbyChip\Desktop\New folder\" /R /D Y "&" icacls.exe \"C:\Users\WobbyChip\Desktop\New folder\" /grant Everyone:F /T'
  • 在可能的情况下会省略可选的引号,以最大程度地减少对嵌套引号的需求。

  • 与往常一样,PowerShell将
  • '...'解释为字符串文字。

  • "个字符。应该这样保留-即使在'...'内也必须保留为\"

  • &"&"的形式转义,以防止cmd.exe对其进行解释(您在注册表中并不严格需要); PowerShell稍后会删除这些双引号,因为它们不是\逸出的。