VBS提取脚本,让一个VBS脚本能以管理员身份运行指定命令

代码如下:

On Error Resume Next

Const SW_MAXIMIZE = 3
Const SEE_MASK_NOCLOSEPROCESS = &H40

Dim shell : Set shell = CreateObject("Shell.Application")

' 定义 ShellExecuteAsAdmin 函数
Sub ShellExecuteAsAdmin(cmdline)
    ' 定义 ShellExecuteInfo 结构体
    Dim sei : Set sei = CreateObject("Shell.ShellExecuteInfo")
    sei.cbSize = Len(sei)
    sei.fMask = SEE_MASK_NOCLOSEPROCESS
    sei.lpVerb = "runas"
    sei.lpFile = "cmd.exe"
    sei.lpParameters = "/c " & cmdline
    sei.lpDirectory = Null
    sei.nShow = SW_MAXIMIZE
    
    ' 调用 ShellExecuteEx 函数以管理员身份运行程序,获取进程句柄
    Dim bRet : bRet = shell.ShellExecuteEx(sei)
    
    If Not bRet Then
        MsgBox "Error: " & Err.Description, vbCritical, "Error"
    Else
        ' 获取进程对象
        Dim objWinProc : Set objWinProc = shell.Windows.Item(sei.hwnd)
        
        ' 等待程序运行结束
        Do While objWinProc.IsBusy
            WScript.Sleep 50
        Loop
        
        ' 关闭进程
        Dim objWMI : Set objWMI = GetObject("winmgmts:\\.\root\cimv2:Win32_Process.Handle=""" & objWinProc.ProcessId & """")
        objWMI.Terminate()
    End If
End Sub
' 定义 ShellExecuteAsAdmin 函数
Function ShellExecuteAsAdmin(ByVal cmd)
    Dim objShell, objShellExecute

    ' 创建 Shell 对象
    Set objShell = CreateObject("Shell.Application")

    ' 使用 Shell 对象调用 ShellExecute 方法以管理员身份运行命令
    Set objShellExecute = objShell.ShellExecute(cmd, "", "", "runas", 1)

    ' 释放对象
    Set objShell = Nothing
    Set objShellExecute = Nothing
End Function

' 调用 ShellExecuteAsAdmin 函数
Dim cmd
cmd = InputBox("请输入命令:")

ShellExecuteAsAdmin cmd

运行之后效果是这样的:

VBS提取脚本,让一个VBS脚本能以管理员身份运行指定命令_第1张图片

我们随便输入一个命令,例如打开cmd

VBS提取脚本,让一个VBS脚本能以管理员身份运行指定命令_第2张图片

在按下确定之后,就可以发现cmd被以管理员身份打开了

VBS提取脚本,让一个VBS脚本能以管理员身份运行指定命令_第3张图片

最后,我想说这个VBS脚本的功能也能用Python实现,想知道Python代码的可以,看我接下来的文章

你可能感兴趣的:(windows)