誰でも自分からvbsを実行するのに役立つことができますが、管理者権限がありますか? VBScript経由でWindows computer8を使用してコンピューターの名前を変更する必要がありますが、管理者のコマンドライン(CMD→管理者として実行→runScript.vbs)でスクリプトを実行する場合にのみ可能です。従来のCMDでスクリプトを開始した場合、コンピューターの名前は変更されません。
私の考えは、パラメーターなしでユーザー権限でスクリプトを開始し、パラメーターがない場合、スクリプトは管理者権限とパラメーター「I'm admin」で再実行します。
誰も私がこれを行う方法を知っていますか?
編集:
私はこれを試しました:
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
の下のレジストリ設定を介して、常にユーザーレベルで昇格を要求するようにプログラムを構成できます。これらのレジストリ設定はオンザフライで有効であるため、特定のアプリケーションを起動する直前に設定したり、必要に応じてアプリケーションが起動するとすぐに削除することもできます。値が"String Value"
の実行可能ファイルへのフルパスに対して、"HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
の下に"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}"
--Google検索とチューニングから、私のために働いて
これは、これに対する普遍的で最適なソリューションです。
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)管理者権限を取得した後、現在のディレクトリは変更されません。
欠点:誰も