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

如何使用PowerShell以管理员身份运行带有参数的程序,powershell,cmd,registry,contextmenu,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\W

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

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中得到了这个错误,但我不知道这意味着什么以及如何修复它


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

请尝试以下操作,该操作应可从注册表中的
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稍后会删除这些双引号,因为它们不是
    \
    转义的


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