【问题标题】:Run script as administrator passing arguments以管理员身份运行脚本传递参数
【发布时间】:2016-10-25 12:53:10
【问题描述】:

我试图以管理员身份运行一个命令,但出现错误。下面是代码。

VBScript:

MyPath ="C:\Destination"
Dim objShell
Set objShell = CreateObject("Shell.Application")  
objShell.ShellExecute "C:\batchScript.cmd " & MyPath &, "", "", "runas", 1

batchScript.cmd:

echo %1
psfile %1 -c

【问题讨论】:

    标签: batch-file command-line vbscript batch-processing


    【解决方案1】:

    这不是我的工作,但我发现它确实是一种很好的代码和平:

    @echo off
    :: ------- Self-elevating.bat --------------------------------------
    @whoami /groups | find "S-1-16-12288" > nul && goto :admin
    set "ELEVATE_CMDLINE=cd /d "%~dp0" & call "%~f0" %*"
    findstr "^:::" "%~sf0">temp.vbs
    cscript //nologo temp.vbs & del temp.vbs & exit /b
    
    ::: Set objShell = CreateObject("Shell.Application")
    ::: Set objWshShell = WScript.CreateObject("WScript.Shell")
    ::: Set objWshProcessEnv = objWshShell.Environment("PROCESS")
    ::: strCommandLine = Trim(objWshProcessEnv("ELEVATE_CMDLINE"))
    ::: objShell.ShellExecute "cmd", "/c " & strCommandLine, "", "runas"
    :admin -------------------------------------------------------------
    @echo Running as elevated user.
    @echo Script file : %~f0
    @echo Arguments   : %*
    @echo Working dir : %cd%
    

    将其用作 CMD 的标头,其余的工作将由它完成。

    【讨论】:

      【解决方案2】:

      胡乱猜测(因为您认为没有必要实际显示错误消息):您使用的是连接运算符 (&) 没有实际连接的东西:

      objShell.ShellExecute "C:\batchScript.cmd " & MyPath &, "", "", "runas", 1
      '                                                    ^
      

      并且您还将参数作为命令的一部分传递。

      删除虚假的连接运算符并将参数作为实际参数传递:

      objShell.ShellExecute "C:\batchScript.cmd", MyPath, "", "runas", 1
      

      另外,$args[0] 不是批处理文件中的有效变量。

      【讨论】:

      • 这会引发错误,因为 windows 找不到 C:\batchScript.cmd C:\Destination... 我在 batchScript.cmd 中使用 %1 来获取命令行参数
      • 它并没有引起错误,但看起来它没有在 batchScript.cmd 中获取值......即使使用了 %1 和 pause 语句,窗口也没有出现
      • 似乎ShellExecute 不喜欢路径周围的双引号。
      • 好的,搜索忽略 UAC 的选项,因为我们是批量进行的,手动干预不是一个好方法
      • 郑重声明:您正在尝试做的是一个坏主意(tm)。除非绝对没有其他方法,否则不应强行关闭打开文件的句柄,尤其是当您频繁执行此操作以保证批处理作业时。用户将丢失数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多