簡體   English   中英

如何從 vbs 以管理員身份運行 vbs?

[英]How to run vbs as administrator from vbs?

任何人都可以幫助我從自身運行 vbs 但具有管理員權限嗎? 我需要通過 VBScript 重命名裝有 Windows 8 的計算機,但只有通過管理員命令行(CMD → 以管理員身份運行 → runScript.vbs)運行我的腳本才有可能。 如果我使用經典 CMD 啟動腳本,則計算機不會重命名。

我的想法是我以用戶權限啟動腳本,不帶參數,如果沒有參數,則腳本以管理員權限重新運行,參數作為標識符“我是管理員”。

有誰知道我該怎么做?

編輯:

我試過這個:

If WScript.Arguments.Count = 0 Then
    Set objShell = CreateObject("Shell.Application")
    objShell.ShellExecute "wscript.exe", "c:\Users\admin\Documents\selfConfigure.vbs -1", "", runas", 1
End If

如果在計算機上啟用了 UAC,則應該可以執行以下操作:

If Not WScript.Arguments.Named.Exists("elevate") Then
  CreateObject("Shell.Application").ShellExecute WScript.FullName _
    , """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1
  WScript.Quit
End If

'actual code

將此添加到文件的開頭:

Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
  Set ObjShell = CreateObject("Shell.Application")
  ObjShell.ShellExecute "wscript.exe" _
    , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
  WScript.Quit
End if

有趣的小批處理文件

@set E=ECHO &set S=SET &set CS=CScript //T:3 //nologo %~n0.vbs /REALTIME^>nul^& timeout 1 /NOBREAK^>nul^& del /Q %~n0.vbs&CLS
@%E%off&color 4a&title %~n0&%S%CX=CLS^&EXIT&%S%BS=^>%~n0.vbs&%S%G=GOTO &%S%H=shell&AT>NUL
IF %ERRORLEVEL% EQU 0 (
    %G%2
) ELSE (
    if not "%minimized%"=="" %G%1
)
%S%minimized=true & start /min cmd /C "%~dpnx0"&%CX%
:1
%E%%S%%H%=CreateObject("%H%.Application"):%H%.%H%Execute "%~dpnx0",,"%CD%", "runas", 1:%S%%H%=nothing%BS%&%CS%&%CX%
:2
%E%%~dpnx0 fvcLing admin mode look up&wmic process where name="cmd.exe" CALL setpriority "realtime"& timeout 3 /NOBREAK>nul
:3
%E%x=msgbox("end of line" ,48, "%~n0")%BS%&%CS%&%CX%

關於高程選項的好文章 - http://www.novell.com/support/kb/doc.php?id=7010269

將應用程序配置為始終請求提升權限:

程序可以配置為始終通過HKCU下的注冊表設置請求用戶級別的提升。 這些注冊表設置即時生效,因此可以在啟動特定應用程序之前立即設置它們,甚至可以在應用程序啟動后立即刪除(如果需要)。 只需在"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers" "String Value"下創建一個"String Value"以獲取值為"RUN AS ADMIN"的可執行文件的完整路徑。 以下是 CMD 的示例。

Windows Registry Editor Version 5.00
[HKEY_Current_User\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"c:\\windows\\system32\\cmd.exe"="RUNASADMIN"

`我的vbs文件路徑:

D:\\QTP Practice\\Driver\\Testany.vbs'

objShell = CreateObject("Shell.Application")

objShell.ShellExecute "cmd.exe","/k echo test", "", "runas", 1

set x=createobject("wscript.shell")

wscript.sleep(2000)

x.sendkeys "CD\"&"{ENTER}"&"cd D:"&"{ENTER}"&"cd "&"QTP Practice\Driver"&"{ENTER}"&"Testany.vbs"&"{ENTER}"

--來自谷歌搜索和一些調整,為我工作

這是對此的通用和最佳解決方案:

If WScript.Arguments.Count <> 1 Then WScript.Quit 1
RunAsAdmin
Main

Sub RunAsAdmin()
    Set Shell = CreateObject("WScript.Shell")
    Set Env = Shell.Environment("VOLATILE")
    If Shell.Run("%ComSpec% /C ""NET FILE""", 0, True) <> 0 Then
        Env("CurrentDirectory") = Shell.CurrentDirectory
        ArgsList = ""
        For i = 1 To WScript.Arguments.Count
            ArgsList = ArgsList & """ """ & WScript.Arguments(i - 1)
        Next
        CreateObject("Shell.Application").ShellExecute WScript.FullName, """" & WScript.ScriptFullName & ArgsList & """", , "runas", 5
        WScript.Sleep 100
        Env.Remove("CurrentDirectory")
        WScript.Quit
    End If
    If Env("CurrentDirectory") <> "" Then Shell.CurrentDirectory = Env("CurrentDirectory")
End Sub

Sub Main()
    'Your code here!
End Sub

好處:

1) 無法進行參數注入。
2) 提權后參數個數不變,提權前可以查看。
3) 如果腳本以管理員身份運行,您會立即了解真實情況。 例如,如果您從控制面板卸載條目調用它,RunAsAdmin 函數將不會不必要地運行,因為在這種情況下您已經是管理員。 如果您從已提升為管理員的腳本中調用它,則同樣如此。
4) 窗口應保持在當前大小和位置。
5) 獲得管理權限后當前目錄不變。

缺點:沒人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM