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.
<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 * Programmewindow.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 : Titelprogs(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 SubSub 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 gestartetIf 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 wartenIf 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 kapselnFor 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 SubSub 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 SubSub 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 SubSub 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.![]() |