【问题标题】:How do i run a program with arguments and as administrator using PowerShell如何使用 PowerShell 以管理员身份运行带有参数的程序
【发布时间】:2019-03-25 17:01:55
【问题描述】:

我有一个脚本,它必须使用参数启动我的程序,是的,它可以工作,就是这样。

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\"'"

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

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

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

有趣的事情,当我试图解决这个问题时,我在 CMD 中收到了这个错误,但我不知道这意味着什么以及如何解决它。

【问题讨论】:

  • 为什么不以管理员身份启动 PowerShell(或 cmd.exe),然后运行您想要的命令?
  • 我相信注册表值不能超过 252 个字符
  • 首先,我检查了 PprocessExplorer 和 PowerShell 运行的所有参数,其次,这是一个函数,允许我使用注册表中的变量 %1 对我想要的每个文件夹执行此操作
  • %1 用于指示您通过脚本外部提供给脚本的第一个参数。在命令行中也就是script.ps1 argument1,其中argument1 是%1。尝试更改快捷方式以包含参数。否则,只需将快捷方式属性设置为管理员权限或诸如此类,然后根据需要运行脚本。还要确保只有管理员可以更改脚本。
  • 我不使用快捷方式

标签: powershell cmd registry contextmenu


【解决方案1】:

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

尝试以下操作,这应该适用于 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 稍后会去掉这些双引号,因为它们不是 \-escaped。

【讨论】:

    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多