You are here : Start WSH - VBS Benutzer zeitweise zum Administrator machen

Benutzer zeitweise zum Administrator machen

Mach Mich zum Administrator ohne zum Admin-Konto zu wechseln.

Problem:
Die allermeisten Programme benötigen bei der Installation Administrator-Rechte. Da diese sich meist in den Programme-Ordner von Windows installieren wollen. Es gibt jedoch einige Anwendungen denen es nicht ausreicht mit "Ausführen als..." (Administrator) gestartet zu werden. Hierbei schafft das Batch-Script von Heise MachMichAdmin.cmd abhilfe. Mit dem Script wird eine CMD-Shell gestartet. Das Batch-Script kann mit einem Parameter gestartet werden (Pfad zu einer Anwendung). Um jetzt eine kleine Auswahl an Programmen anzubieten wird eine HTA-Script gestartet.
Als z.B.runapp_machmichadmin.hta speichern und starten.
Anmerkung:
- Das Script funktioniert nur wenn dieser User (Admin ) ein vergebenes Passwort hat.
- Wenn im Script die Konstande cPassword mit den Administrator-Passwort belegt wird startet es das Programm ohne PW-Nachfrage.
- Nur für den Privatgebauch einsetzen da durch das Passwort Admin-Rechte erlangt werden
- Dieses Script ist ab Windows Vista nicht mehr notwendig.
Script-Link
<html>
<head>
<HTA:APPLICATION

ID="StartApp"

APPLICATIONNAME="HTAProgramme"

BORDER="dialog"

SCROLL="no"

SINGLEINSTANCE="yes"

SHOWINTASKBAR="yes"

MINIMIZEBUTTON="no"

maximizeButton="no"

>
<title>Programme Administrator-Rechten starten</title>

<style type="text/css">
body {

bgcolor:"#202060";

text:"#FFFFFF";

font-size:12Pt;

color:#E0C000;

font-style:bold;

font-family:Verdana;

background-color: #006;

}
input {font-size:12pt; color:#202060; font-style:bold; font-family:Verdana}
</style>
</head>

<SCRIPT LANGUAGE="VBScript">
Dim wsh, fs, a, smma, progs , progstitle, iprog, Wartezeit
'Benutzer-Name mit Administratoren-Rechte
Const cAdmin = "administrator"
Const cPassword = ""
Wartezeit = 500  'Sollte die Wartezeit (msec.) um das Passwort zu "tippen" zu kurz sein dann die Zahl vergrößern.

'Wer den Hinweis eines Fehlers gern als Popup hat auf True setzten sonst False
Const fPopUp = False


Set wsh = CreateObject("WScript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")

smma = wsh.ExpandEnvironmentStrings("%temp%") & "\MachMichAdmin.cmd"    

Sub Window_onLoad

FillArray

ProgrammList

  'Breite, Höhe (ohne Programm-Optionen) + x * Programme

window.resizeTo 350, 250 + iprog * 20 + 30 '30 für das <br> im 1. Eintrag

top.Document.title = wsh.ExpandEnvironmentStrings("%USERNAME%") & " wird Administrator"

End Sub

'Hier die Programme eintragen welche gestartet werden können/sollen
Sub FillArray
' Übersichtlicher ist es so  

iprog = 10 'Anzahl der Programme welche gestaretet werden können

ReDim progs(1, iprog)

  '            Programmpfad                                                         : Titel    

progs(0,0) = "cmd /T:4F /k Title *** %USERNAME%-Rechte ***"                       : progs(1, 0) = "Command Shell"

progs(0, 1) = "%programfiles%\CDBurnerXP\cdbxpp.exe"                              : progs(1, 1) = "CDBurnerXP"

progs(0, 2) = """%programfiles%\Mozilla Firefox\firefox.exe"""                    : progs(1, 2) = "Firefox"

progs(0, 3) = """%programfiles%\Foxit Software\Foxit Reader\Foxit Reader.exe"""   : progs(1, 3) = "Foxit Reader"

progs(0, 4) =  """%programfiles%\Internet Explorer\iexplore.exe"""                : progs(1, 4) = "IExplorer"

progs(0, 5) = """%programfiles%\iTunes\iTunes.exe"""                              : progs(1, 5) = "iTunes"

progs(0, 6) = """%programfiles%\Skype\Phone\Skype.exe"""                          : progs(1, 6) = "Skype"

progs(0, 7) = """%programfiles%\Mozilla Thunderbird\thunderbird.exe"""            : progs(1, 7) = "Thunderbird"

progs(0, 8) = "%programfiles%\totalcmd\TOTALCMD.EXE"                              : progs(1, 8) = "TotalCommander"

progs(0, 9) = "%programfiles%\TrueCrypt\TrueCrypt.exe"                            : progs(1, 9) = "TrueCrypt"

progs(0, 10) = "%programfiles%\Winamp\winamp.exe"                                 : progs(1, 10) = "Winamp"

End Sub


Sub RunSkript

Dim i, s, sp    

For Each objButton In RadioOption

If objButton.Checked Then

i =objButton.Value

sp =  Replace(progs(0, i), "%programfiles%", wsh.ExpandEnvironmentStrings("%programfiles%"))  

If Left(sp,1) = """" Then sp = Right(sp, Len(sp)-1)

If Right(sp,1) = """" Then sp = Left(sp, Len(sp)-1)

      'Stimmt der angegebene Pfad zu Programm bzw. wird die CMD-Shell gestartet

If fs.fileExists(sp) Or InStr(1,progs(0, i), "cmd") Then

MachMichAdmin

s = smma & " " & progs(0, i)

wsh.run s, 1

      ' Passwort mit Sendkeys übertragen, aber etwas warten

If cPassword <> vbnullstring Then

WaitAndSendkeys Wartezeit, True, False

WaitAndSendkeys 5000, False, True

End If

If CloseApp.Checked Then Schliessen()

Else      

s = "Programm-Pfad<br>""" & sp & """<br> wurde nicht gefunden."

UserInfo s

End If

Exit For

End If

Next

End Sub

' Einfach ein kleines WSH-Script mit sleep erzeugen, Passwort senden bzw del batch, dieses starten und wieder löschen.
Sub WaitAndSendkeys(wait, sendkey, clean)

Dim s, spw

s = wsh.ExpandEnvironmentStrings("%TEMP%") & "\~tmp.vbs"

Set a = fs.opentextfile(s , 2, True, 0)

With a

.writeline "Option Explicit"

.writeline "Dim wsh, s"

.writeline "WScript.sleep " & wait

.writeline "Set wsh = CreateObject(""WScript.shell"")"  

If sendkey = True Then

      'Jeden einzelnen Buchstaben des Passwortes mit geschweiften Klammern kapseln

For i = 1 To Len(cPassword)

spw = spw & "{" & Mid(cPassword, i, 1) & "}"

Next

.writeline "wsh.Sendkeys """  & spw & "{Enter}"""  ' ""{i}{s}{t}{ }{g}{e}{h}{e}{i}{m}{Enter}"""  

End If

If clean Then

.writeline "s = ""%COMSPEC% /C del /F /Q """"" & smma & """"""""

.writeline "wsh.Run s, 0, True"

End If

.close      

End With

wsh.run "cscript.exe " & s, 0, True

s = "%COMSPEC% /C del /F /Q " & s

wsh.Run s, 0, True

End Sub

'Batch-Script erzeugen um den aktuellen Benutzer kurzzeitig In die Administratorengruppe zu heben
'gekürzte Version der Machmichadmin.cmd von Johannes Endres c't
Sub MachMichAdmin

Set a = fs.opentextfile(smma , 2, True, 0)  

With a

.writeline "@echo off %debug%"

.writeline "setlocal"

.writeline "Set _Admin_=""%COMPUTERNAME%\" & cAdmin & """"

.writeline "Set _Group_=Administratoren"

.writeline "Set _Default_Prog_=cmd.exe /T:4F /k Title *** %USERNAME% mit %_Group_%-Rechten ***"

.writeline "ver | %systemroot%\system32\findstr.exe ""[Version 5."" > nul || GoTo usage"

.writeline "Set _savecred_=/savecred"

.writeline "Set _runas_err_=^|^| pause"

.writeline "ver | %systemroot%\system32\findstr.exe /C:""Windows 2000"" >nul"

.writeline "If Not errorlevel 1 ("

.writeline "  Set _savecred_="

.writeline "  Set _runas_err_=^&^& pause"

.writeline ")"

.writeline "Set | %systemroot%\system32\findstr.exe  /B ""_Program_To_Run_="" >nul && GoTo secondrun"

.writeline "%systemroot%\system32\net.exe localgroup %_Group_% |%systemroot%\system32\findstr.exe /X /I /C:""%username%"" >nul && GoTo already_admin"

.writeline "%systemroot%\system32\net.exe localgroup %_Group_% |%systemroot%\system32\findstr.exe /X /I /C:""%userdomain%\%username%"" >nul && GoTo already_admin"

.writeline "Set _Program_To_Run_=%_Default_Prog_%"

.writeline "If """"==""%~1"" GoTo callmyself"

.writeline "Set _Program_To_Run_=cmd /c start ""%_Group_%-Shell"" /B %*"

.writeline "echo %~x1 | %systemroot%\system32\findstr.exe  /I "".BAT .CMD"" >nul && Set _Program_To_Run_=%*"

.writeline "If exist %~s1\... Set _Program_To_Run_=%systemroot%\explorer %~f1"

.writeline ":callmyself"

.writeline "Set _Program_To_Run_=%_Program_To_Run_:""=\""%"

.writeline "pushd %~dp0"

.writeline "%systemroot%\system32\runas.exe /user:%_Admin_% /env ""%~s0"" %_runas_err_%"

.writeline "popd"

.writeline "exit/b"

.writeline ":secondrun"

.writeline "%systemroot%\system32\net.exe localgroup %_Group_% ""%USERDOMAIN%\%USERNAME%"" /ADD || pause"

.writeline "%systemroot%\system32\runas.exe %_savecred_% /u:""%USERDOMAIN%\%USERNAME%"" ""%_Program_To_Run_%"" %_runas_err_%"

.writeline "%systemroot%\system32\net.exe localgroup %_Group_% ""%USERDOMAIN%\%USERNAME%"" /DELETE || pause"

.writeline "If Not """"==""%debug%"" pause"

.writeline "exit /b"

.writeline ":already_admin"

.writeline "If """"==""%~1"" start "" %_Default_Prog_%"

.writeline "If Not """"==""%~1"" start """" %*"

.writeline "exit /b"

.writeline "endlocal"

.writeline "exit /b 0"

.writeline ":usage"

.writeline "echo Dieses Skript funktioniert nur unter Windows 2000, XP und Server 2003."

.writeline "echo    %_Default_Prog_%"

.writeline "exit /b 1"

.close

End With

End Sub

Sub UserInfo(s)

If fPopUp Then

s = Replace(s, "<br>", vbcrlf)

wsh.popup s, 5, "Datei fehlt !"

Schliessen()

Else    

window.resizeTo 350, 220

s = s & "<br><br><input class=""button"" type=""button"" value="" OK "" name=""EndeHTA2"" onClick=""Schliessen()""><br>"

ProgramList.InnerHTML = ""

Info.InnerHTML = s

End If

End Sub

Sub ProgrammList

Dim i

window.resizeTo 350, 220

ProgramList.InnerHTML = ""

s = "  Welches Programm starten ?<br/><br/>" & vbcrlf

For i = 0 To UBound(progs,2) - 1

If i = 0 Then

s = s & "<br/>  <input type=""radio"" name=""RadioOption"" value=""" & i & """ Checked><b> " & progs(1, i) & "</b><br>"

Else

s = s & "<br/>  <input type=""radio"" name=""RadioOption"" value=""" & i & """> " & progs(1, i)

End If

Next

s = s & "<br/><br/>  <input id=runbutton   class=""button"" type=""button"" value=""Starten"" name=""run_button"" onClick=""RunSkript()"">" & vbcrlf & _

"  <input id=closebutton class=""button"" type=""button"" value=""Beenden"" name=""EndeHTA"" onClick=""Schliessen()"">" & vbcrlf & _

"<br/><br/>  <input type=""checkbox"" name=""CloseApp"" value=""1"" Checked = True> Danach schließen <br/><br/>"  

Info.InnerHTML = s

End Sub

Sub Schliessen()

self.close

End Sub

</SCRIPT>

<body>
<fieldset><LegEnd align="Center"></legend>

<span id="ProgramList">  

</span>

<div id="info" style="margin: 10px; font-size:11pt;"></div>

</fieldset>
</body>
 

Ergebnis:

Beim Ausführen wird eine HTML-Seite gestartet und die Eingabe zu erfragen.
Programm auswählen und mit Starten das Programm aufrufen.

 
JoomlaTheme.net