博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
'sudo'不是内部或外部命令,,,,的解决办法
阅读量:5174 次
发布时间:2019-06-13

本文共 1666 字,大约阅读时间需要 5 分钟。

【说明】

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

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

【源码】

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

【效果】

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

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

        sudo  <command>  [args...]

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

图1

图2

图3

 

【注意事项】

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

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

转载于:https://www.cnblogs.com/shangren/p/8135791.html

你可能感兴趣的文章
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>
计算机网络基础知识
查看>>
C#里如何遍历枚举所有的项
查看>>
超级强大的鼠标手势工具
查看>>
常用Dockerfile举例
查看>>
jquery的ajax用法
查看>>
设计模式-策略模式(Strategy)
查看>>
django orm 数据查询详解
查看>>
JarvisOJ Basic 熟悉的声音
查看>>
C# list导出Excel(二)
查看>>
CAS 单点登录模块学习
查看>>
Android应用开发-网络编程①
查看>>
input中的name,value以及label中的for
查看>>
静态库制作-混编(工程是oc为基础)
查看>>
jQuery 显示加载更多
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>