Seite 1 von 1

Fehler im "Get-Admin"-Script

Verfasst: 31.07.2023, 14:37
von g-force
Ich bin mir nicht mehr ganz sicher, aber dieser Code (um im Script Adminrechte zu bekommen) stammt vermutlich von @Holgi.

Code: Alles auswählen

@echo off
setlocal enabledelayedexpansion
COLOR 0a
chcp 1252 >nul

:: BatchGetAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"

    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"

@echo off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================

:init
setlocal DisableDelayedExpansion
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)

ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************

ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " "  >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
"%SystemRoot%\System32\WScript.exe" "%vbsGetPrivileges%" %*
exit /B

:gotPrivileges
setlocal & pushd .
cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul  &  shift /1)

::START
REM - Add BATCH commands you want to run here

@echo off
Ich hatte diesen Code in einige CMD mit eingebaut, was bis vor ein paar Tagen gut funktioniert hat. Nun zickt die Geschichte allerdings irgendwie: Bei einem PC, der im AUDIT-Modus das erstemal hochfährt, funktionieren alle Scripts ohne weitere Abfrage von UAC. Führe ich allerdings zwischendurch einen manuellen Neustart durch (z.B. nach Treiberinstallation), dann ploppt UAC mehrfach auf und nach Bestätigung von UAC bricht das Script ohne Warnung ab.

Re: Fehler im "Get-Admin"-Script

Verfasst: 31.07.2023, 15:27
von Holgi
bei mir funktioniert dein obiges Script.
Allerdings habe das nicht mit dem AUDIT-Modus getestet.
Kann also nur daran liegen (und an dem Neustart (?).

Re: Fehler im "Get-Admin"-Script

Verfasst: 02.08.2023, 10:25
von Holgi
Fehler gefunden?

Re: Fehler im "Get-Admin"-Script

Verfasst: 03.08.2023, 09:01
von g-force
Nein, eigentlich nicht gefunden. Ich habe die gesamte Installation nun derart umgestellt, daß 1.) kein Neustart durch den Mitarbeiter mehr erforderlich ist (wird alles vorher durch MDT erledigt) und 2.) den Code-Schnipsel aus allen CMD entfernt habe, da er nicht mehr erforderlich ist.