运行 脚本作为管理员传递参数
Run script as administrator passing arguments
我正在尝试 运行 以管理员身份执行一个命令,但出现错误。下面是代码。
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
这不是我的工作,但我发现它真的是一个很好的代码和平:
@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 的 header,它会完成剩下的工作。
大胆猜测(因为您认为没有必要实际显示错误消息):您使用的是连接运算符 (&
),但没有实际连接的内容:
objShell.ShellExecute "C:\batchScript.cmd " & MyPath &, "", "", "runas", 1
' ^
并且您还将参数作为命令的一部分传递。
删除伪串联运算符并将参数作为实际参数传递:
objShell.ShellExecute "C:\batchScript.cmd", MyPath, "", "runas", 1
此外,$args[0]
不是批处理文件中的有效变量。
我正在尝试 运行 以管理员身份执行一个命令,但出现错误。下面是代码。
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
这不是我的工作,但我发现它真的是一个很好的代码和平:
@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 的 header,它会完成剩下的工作。
大胆猜测(因为您认为没有必要实际显示错误消息):您使用的是连接运算符 (&
),但没有实际连接的内容:
objShell.ShellExecute "C:\batchScript.cmd " & MyPath &, "", "", "runas", 1
' ^
并且您还将参数作为命令的一部分传递。
删除伪串联运算符并将参数作为实际参数传递:
objShell.ShellExecute "C:\batchScript.cmd", MyPath, "", "runas", 1
此外,$args[0]
不是批处理文件中的有效变量。