'sudo'不是内部或外部命令,,,,的解决办法
2017-12-28 15:07
6913 查看
【说明】
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 "语法: 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 命令并不能直接获取到管理员权限,而只是在程序需要管理员权限时自动弹出请求窗口,然后我们手动允许其以管理员权限运行。
如果有办法获取到 “用户帐户控制” 窗口的句柄,或者将焦点移动到 “用户账户控制” 窗口,就可以直接自动获取到管理员权限。
相关文章推荐
- 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决办法
- 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决办法
- NetBeans启动Tomcat报“'127.0.0.1' 不是内部或外部命令”启动失败的解决办法
- 'java' 不是内部或外部命令,也不是可运行的程序的两个解决办法
- 解决'ping' 不是内部或外部命令,也不是可运行的程序
- 安装完Java虚拟机后,在cmd命令提示符窗口中使用DOS命令,提示“不是内部或外部命令,也不可运行的程序”的解决办法
- win7下mysql 不是内部或外部命令解决办法
- 'JAVAC' 不是内部或外部命令的解决方法
- cocos不是内部或外部命令 解决办法
- modelsim命令行仿真提示“vsim 不是内部或外部命令,也不是可运行的程序或批处理文件”的解决办法
- 钩子导致svnlook不是内部或外部命令的解决办法
- windows系统提示不是内部或外部命令也不是可运行的程序的解决办法
- 'tasklist' 不是内部或外部命令,也不是可运行的程序(解决办法)
- cmd 里面运行git提示“不是内部或外部命令,也不是可运行的程序”的解决办法
- 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决办法
- yiic执行出现不是内部或外部命令的解决办法 <转>
- win7下出现'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决方法
- cmd 里面运行git提示“不是内部或外部命令,也不是可运行的程序”的解决办法
- "javac不是内部或外部命令"的解决办法
- 关于淘宝cnpm 安装后cnpm不是内部或外部命令的解决办法