@Echo off
Rem  
Rem  (c) tom-agplv3@jig.ch
Rem  Dieses Software untersteht der AGPLv3 Lizenz: https://choosealicense.com/licenses/agpl-3.0/
Rem   
Rem  Wichtig: Bitte beachte die Datei: Hinweis AGPLv3 Lizenz.txt
Rem   
Rem   
Rem 190301, tom-agplv3@jig.ch
Rem 200731, tom-agplv3@jig.ch
Rem 	Welcome-Msg
Rem  PowerShell -ExecutionPolicy Bypass
Rem  RunElevated
Rem 200806, tom-agplv3@jig.ch
Rem  WaitOnEndCmd mit Sleep
Rem  WaitOnEndPS mit Sleep
Rem 210709, tom-agplv3@jig.ch
Rem  Die RunOnce-Config wird neu vor der Elevation ausgeführt,
Rem  so dass es auch für User ohne Admin-Rechte funktioniert
Rem 	RunOnce für:
Rem 	- WipeCiscoTrash: PurgeNotifyObjects.exe
Rem 	- Explorer mit dem Onboarding-Verzeichnis


:: Konfiguration
SET WelcomeMsg=Deinstalliere die alte Cisco AnyConnect SW
:: RunElevated: 0 oder 1
SET RunElevated=0
:: Verbose: 0 oder 1
SET Verbose=0
SET PowerShellVerbose=1
:: Ex: Call :Verbose "Verbose ist aktiv!"

:: WaitOnEnd: 
:: <Leer>  Nicht definiert
:: 0       Disabled, d.h. einfach schliessen
:: 1       Pause
:: >1      Sleep for n Seconds
SET WaitOnEndCmd=0
SET WaitOnEndPS=


SET "ScriptDir=%~dp0"
SET "ScriptFilename=%~n0"
SET "PSScript_ps1=10 Uninstall CiscoAnyConnect\10 Uninstall-AnyConnect.ps1"
:: Echo %PSScript_ps1%

:: Argumente, die dem PowerShell-Script mitgegeben werden
If (%WaitOnEndPS%)==() (
	SET "PSScript_Args="
) Else (
	SET "PSScript_Args=-WaitOnEnd %WaitOnEndPS%"
)


:: RunOnce / das Folge-Script vorbereiten
:: Wenn wir nicht Elevated starten, initialisieren wir RunOnce hier
If %RunElevated% EQU 0 ( 
	Call :AddRunOnce
)



If %RunElevated% EQU 1 ( Goto :checkPrivileges ) Else ( Goto :SkipCheckPrivileges )

	:CheckPrivileges
	NET FILE 1>NUL 2>NUL
	If %errorlevel% EQU 0 ( Goto :gotPrivileges ) else ( Goto :getPrivileges )

	
	:GetPrivileges
	:: RunOnce / das Folge-Script vorbereiten
	:: Wenn wir Elevated starten, initialisieren wir RunOnce, bevor wir elevated sind
	If %RunElevated% EQU 0 ( 
		Call :AddRunOnce
	)
	
	If '%1'=='ELEV' (shift & Goto gotPrivileges)
	Echo.
	Echo **************************************
	Echo Invoking UAC for Privilege Escalation
	Echo **************************************

	Setlocal DisableDelayedExpansion
	Set "batchPath=%~0"
	Setlocal EnableDelayedExpansion
	Echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
	Echo UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
	"%temp%\OEgetPrivileges.vbs"
	Exit /B

	:GotPrivileges
	::::::::::::::::::::::::::::
	::START
	::::::::::::::::::::::::::::
	Setlocal & pushd .

	REM Run as admin - put here code as you like


:SkipCheckPrivileges


If NOT "%WelcomeMsg%"=="" (
	Echo.
	Echo %WelcomeMsg%
	Echo.
)


Call :Verbose "Starte: %PSScript_ps1%"
Call :Verbose "Args: %PSScript_Args%"

If Exist "%PSScript_ps1%" (
	Rem SET "PSScript=%ScriptDir%%PSScript_ps1%"
	Call :Verbose "PS1-Datei: gefunden"
	Call :StartPS "%PSScript_ps1%"
) Else (
	Call :Verbose "PS1-Datei: nicht gefunden"
)


If %WaitOnEndCmd% EQU 0 Goto :Ende
If %WaitOnEndCmd% EQU 1 Goto :Pause
Call :Sleep %WaitOnEndCmd%
Goto :Ende


:: =========================================================================

:StartPS
:: Startet eine ps1 - Datei
Rem Umgebende " entfernen
SET ScriptName=%~1
If (%Verbose%) == (1) (
	Echo Starte:
	Echo "%ScriptDir%%ScriptName%"
	Echo Args:
	Echo "%PSScript_Args%"
	Echo.
)
If (%PowerShellVerbose%) == (0) (
	PowerShell -ExecutionPolicy Bypass ". '%ScriptDir%%ScriptName%' %PSScript_Args%"
) Else (
	PowerShell -ExecutionPolicy Bypass ". '%ScriptDir%%ScriptName%' %PSScript_Args% -Verbose"
)
Exit /b



:AddRunOnce
:: RunOnce: Ausführen: 20 Delete-AnyConnect-Leichen.bat
:: Den Parent-Folder des Scripts holen
Set RegData="%ScriptDir%10 Uninstall CiscoAnyConnect\20 Delete-AnyConnect-Leichen.bat"
REG ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v "WipeCiscoTrash" /t REG_SZ /d %RegData% /f

:: RunOnce: Explorer mit dem Onboarding-Script Dir ÷ffnen
:: Den Parent-Folder des Scripts holen
For %%I in ("%~dp0.") do for %%J in ("%%~dpI.") Do Set "ParentFolder=%%~dpnxJ"
Set RegData="C:\Windows\explorer.exe \"%ParentFolder%\""
REG ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v "OpenOnboardingDir" /t REG_SZ /d %RegData% /f

Exit /b




:Verbose
:: Wenn die Variable Verbose definiert ist, wird %1 ausgegeben
Rem Umgebende " entfernen
SET Message=%~1
Rem Doppelte " entfernen
SET Message=%Message:"=%
If (%Verbose%) == (1) Echo %Message%
Exit /b


:Sleep
:: Arg 1: Anzahl Sekunden schlafen
IF (%1)==() (
  SET sleep=1
) else (
  SET sleep=%1
)

FOR /L %%A IN (0,1,%sleep%) DO (
	Ping -w 1000 -n 1 1.1.0.0 > nul
	Echo|set /p=.
)
Echo.
Exit /b


:Pause
Echo.
Pause

:Ende
