2013-07-04 45 views
14

Bất cứ ai có thể giúp tôi chạy vbs từ chính nó nhưng với quyền quản trị viên? Tôi cần đổi tên máy tính với Win8 qua vbs nhưng có thể chỉ khi tôi chạy tập lệnh của mình thông qua dòng lệnh quản trị viên (cmd -> Chạy với tư cách Quản trị viên -> runScript.vbs). Nếu tôi bắt đầu kịch bản với máy tính cmd cổ điển không được đổi tên.Làm thế nào để chạy vbs là quản trị viên từ vbs?

Ý tưởng của tôi là tôi bắt đầu tập lệnh với quyền người dùng, không có tham số và nếu không có tham số, tập lệnh tự chạy với quyền quản trị và tham số là nhận dạng "Tôi là quản trị viên".

Có ai biết cách tôi có thể thực hiện việc này không? Cảm ơn. McAndy

chỉnh sửa:

Tôi cố gắng này:

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 
+0

kiểm tra độ cao powertoy http://blogs.technet.com/b/elevationpowertoys/archive/2010/06/20/creating-a-self-elevating-script.aspx –

+0

Đây là mã tuyệt vời nhưng tôi nghĩ đó không phải là giải pháp cho vấn đề của tôi. Vấn đề của tôi là không nhận được nếu kịch bản đang chạy như admin hay không. Tôi cần chạy nó như admin. Mã này chỉ để kiểm tra nó, tôi đúng không? – Daphnis

+0

nope "Tập lệnh sau sẽ" tự khởi chạy lại "nếu nó chưa được nâng lên" –

Trả lời

19

Nếu UAC được kích hoạt trên máy tính, một cái gì đó như thế này nên làm việc:

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 
+0

Đó là thực tế giống như những gì tôi đã thử. Nhưng nó không hoạt động. UAC có nghĩa là gì?Tôi đã đặt thành "Không bao giờ thông báo", có bị vô hiệu hóa không? Nếu tôi thử thay đổi UAC thành tùy chọn cao hơn, nó không giúp ích gì. – Daphnis

+0

"Không bao giờ thông báo" trên Win8 không chính xác bị vô hiệu hóa (bạn phải sử dụng chính sách để tắt hoàn toàn), nhưng gần như. Mã này làm việc tốt cho tôi khi tôi kích hoạt lại UAC trên hộp kiểm Win7 của mình. Bạn đã khởi động lại sau khi thay đổi cấp UAC chưa? –

+0

Không, nhưng không may là tôi không thể sử dụng UAC được bật vì tập lệnh này phải hoạt động mà không có người dùng. Không người dùng nào sẽ chờ yêu cầu quyền truy cập. Kịch bản này dành cho các thử nghiệm tự động. Không phải là lựa chọn khác? :/ – Daphnis

4

Thêm phần này vào đầu tệp của bạn:

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 
+0

Mã này làm việc cho tôi, câu trả lời được chấp nhận không. – gronostaj

+0

@gronostaj Sau đó, đường dẫn kịch bản của bạn rõ ràng là có không gian trong đó, bởi vì đó là sự khác biệt duy nhất giữa câu trả lời này và của tôi. –

+0

Tại sao bạn làm điều này WshShell = WScript.CreateObject ("WScript.Shell") và sau đó không bao giờ sử dụng đối tượng? –

2

Nice bài viết cho các tùy chọn độ cao - http://www.novell.com/support/kb/doc.php?id=7010269

Ứng dụng Cấu hình Luôn Yêu cầu Elevated Quyền:

chương trình có thể được cấu hình để luôn luôn yêu cầu cao về mức độ người dùng thông qua các thiết lập registry dưới HKCU. Các cài đặt đăng ký này có hiệu quả khi đang di chuyển, vì vậy chúng có thể được đặt ngay trước khi khởi chạy một ứng dụng cụ thể và thậm chí loại bỏ ngay khi ứng dụng được khởi chạy, nếu muốn. Đơn giản chỉ cần tạo ra một "Chuỗi giá trị" theo "HKCU \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers" cho đường dẫn đầy đủ đến một thực thi với một giá trị "RUNASADMIN". Dưới đây là một ví dụ cho CMD.

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

Nhưng tôi cần đặc quyền nâng cao để chỉnh sửa cài đặt đăng ký đó ngay từ đầu, phải không? Loại thất bại mục đích. – masterxilo

2

tập tin vui lil batch

@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% 
+1

Bạn có thể mô tả cách hoạt động của tập lệnh này không? – Lizz

2

'My đường dẫn tập tin 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}" 

- từ tìm kiếm của Google và một số điều chỉnh, làm việc cho tôi