1. 程式人生 > >'sudo'不是內部或外部命令,,,,的解決辦法

'sudo'不是內部或外部命令,,,,的解決辦法

.com 下使用 object lex res nts windows 手動 rac

【說明】

Windows系統從 Vista 版本開始加入了 UAC 機制,這導致沒有足夠權限的程序無法獲取到一些關鍵資源。在 Linux 下我們可以使用 sudo 命令方便地提升當前程序的執行權限,但在 Windows 中卻通常只能右鍵單擊程序圖標,再選擇 “以管理員身份運行”。這種必須使用鼠標點擊的方式很不方便,尤其在我們希望自動化執行一些任務時更是顯得礙手礙腳。

我們可以自己寫一個運行在 Windows 系統的 sudo 命令工具。


【源碼】

    1. ‘ShellExecute 方法
    2. ‘作用: 用於運行一個程序或腳本。
    3. ‘語法
    4. ‘ .ShellExecute "application", "parameters", "dir", "verb", window
    5. ‘ .ShellExecute ‘some program.exe‘, ‘"some parameters with spaces"‘, , "runas", 1
    6. ‘關鍵字
    7. ‘ application 要運行的程序或腳本名稱
    8. ‘ parameters 運行程序或腳本所需的參數
    9. ‘ dir 工作路徑,若未指定則使用當前路徑
    10. ‘ verb 要執行的動作 (值可以是 runas/open/edit/print)
    11. ‘ runas 動作通常用於提升權限
    12. ‘ window 程序或腳本執行時的窗口樣式 (normal=1, hide=0, 2=Min, 3=max, 4=restore, 5=current, 7=min/inactive, 10=default)
    13. Set UAC = CreateObject("Shell.Application")
    14. Set Shell = CreateObject("WScript.Shell")
    15. If WScript.Arguments.count<1 Then
    16. WScript.echo "語法: sudo <command> [args]"
    17. ElseIf WScript.Arguments.count=1 Then
    18. UAC.ShellExecute WScript.arguments(0), "", "", "runas", 1
    19. ‘ WScript.Sleep 1500
    20. ‘ Dim ret
    21. ‘ ret = Shell.Appactivate("用戶賬戶控制")
    22. ‘ If ret = true Then
    23. ‘ Shell.sendkeys "%y"
    24. ‘ Else
    25. ‘ WScript.echo "自動獲取管理員權限失敗,請手動確認。"
    26. ‘ End If
    27. Else
    28. Dim ucCount
    29. Dim args
    30. args = NULL
    31. For ucCount=1 To (WScript.Arguments.count-1) Step 1
    32. args = args & " " & WScript.Arguments(ucCount)
    33. Next
    34. UAC.ShellExecute WScript.arguments(0), args, "", "runas", 5
    35. End If

【效果】

新建一個文本文件,將上面代碼復制粘貼到文件中,並重命名文本文件為 sudo.vbs (註意後綴改成了 .vbs)。將 sudo.vbs 所在路徑添加到環境變量 PATH 中,這樣我們就可以在任意路徑下使用 sudo 命令獲取管理員權限了。

使用時我們可以在命令行輸入

sudo <command> [args...]

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

技術分享圖片

圖1

技術分享圖片

圖2

技術分享圖片

圖3

技術分享圖片


【註意事項】

這個 sudo 命令並不能直接獲取到管理員權限,而只是在程序需要管理員權限時自動彈出請求窗口,然後我們手動允許其以管理員權限運行。

如果有辦法獲取到 “用戶帳戶控制” 窗口的句柄,或者將焦點移動到 “用戶賬戶控制” 窗口,就可以直接自動獲取到管理員權限。

'sudo'不是內部或外部命令,,,,的解決辦法