web-dev-qa-db-ja.com

vbsから管理者としてvbsを実行する方法は?

誰でも自分から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
17
Daphnis

コンピューターで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
24
Ansgar Wiechers

これをファイルの先頭に追加します。

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
6
Hussain

楽しいリルバッチファイル

@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%
3
funny

昇格オプションに関する素晴らしい記事- 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"
2
Amit

`私の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検索とチューニングから、私のために働いて

2
Hari Krishna

これは、これに対する普遍的で最適なソリューションです。

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)管理者権限を取得した後、現在のディレクトリは変更されません。

欠点:誰も

1