Windows中实现sudo命令——命令行环境中获取管理员权限

【说明】

        Windows系统从 Vista 版本开始加入了 UAC 机制,这导致没有足够权限的程序无法获取到一些关键资源。在 Linux 下我们可以使用 sudo 命令方便地提升当前程序的执行权限,但在 Windows 中却通常只能右键单击程序图标,再选择 “以管理员身份运行”。这种必须使用鼠标点击的方式很不方便,尤其在我们希望自动化执行一些任务时更是显得碍手碍脚。

        我们可以自己写一个运行在 Windows 系统的 sudo 命令工具。

 

【源码】

'ShellExecute 方法
 
'作用: 用于运行一个程序或脚本。
 
'语法
'      .ShellExecute "application", "parameters", "dir", "verb", window
'      .ShellExecute 'some program.exe', '"some parameters with spaces"', , "runas", 1
 
'关键字
'   application   要运行的程序或脚本名称
'   parameters    运行程序或脚本所需的参数
'   dir           工作路径,若未指定则使用当前路径
'   verb          要执行的动作 (值可以是 runas/open/edit/print)
'                   runas 动作通常用于提升权限
'   window        程序或脚本执行时的窗口样式 (normal=1, hide=0, 2=Min, 3=max, 4=restore, 5=current, 7=min/inactive, 10=default)
 
 
Set UAC = CreateObject("Shell.Application")
Set Shell = CreateObject("WScript.Shell")
If WScript.Arguments.count<1 Then
    WScript.echo "Please use command :  sudo <command> [args]"
ElseIf WScript.Arguments.count=1 Then
    UAC.ShellExecute WScript.arguments(0), "", "", "runas", 1
'    WScript.Sleep 1500
'    Dim ret
'    ret = Shell.Appactivate("用户账户控制")
'    If ret = true Then
'        Shell.sendkeys "%y"        
'    Else
'        WScript.echo "自动获取管理员权限失败,请手动确认。"
'    End If
Else
    Dim ucCount
    Dim args
    args = NULL
    For ucCount=1 To (WScript.Arguments.count-1) Step 1
        args = args & " " & WScript.Arguments(ucCount)
    Next
    UAC.ShellExecute WScript.arguments(0), args, "", "runas", 5
End If

【效果】

        新建一个文本文件,将上面代码复制粘贴到文件中,并重命名文本文件为 sudo.vbs (注意后缀改成了 .vbs)。将 sudo.vbs 所在路径添加到环境变量 PATH 中,这样我们就可以在任意路径下使用 sudo 命令获取管理员权限了。

        使用时我们可以在命令行输入

        sudo  <command>  [args...]

        效果如 图1、图2、图3 所示:

图1

 

图2

图3

【注意事项】

        这个 sudo 命令并不能直接获取到管理员权限,而只是在程序需要管理员权限时自动弹出请求窗口,然后我们手动允许其以管理员权限运行。

        如果有办法获取到 “用户帐户控制” 窗口的句柄,或者将焦点移动到 “用户账户控制” 窗口,就可以直接自动获取到管理员权限。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_格鲁特宝宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值