senseless-creature
Goto Top

VBS soll CMD mit Adminrecht starten

Hallo Leute, ich möchte per VBS ein CMD mit Adminrechten starten und so den Inhalt von %temp% löschen. Mein Script macht dies auch, allerdings werden die Ordner in %temp% nicht gelöscht und das CMD-Fenster soll sich nach dem löschen wieder schließen - normalerweise würde ich hier ein , True setzen, damit an dieser Stelle die nächsten Zeilen meines VBS abgearbeitet werden, dann werden die Dateien allerdings nicht mehr gelöscht. Wo ist mein Fehler?

Hier mal mein Code:
Set objShell = CreateObject("Shell.Application")  
objShell.ShellExecute "cmd.exe", "/k del /F /S /Q %temp%", "", "runas", 1  
LG

Content-ID: 576723

Url: https://administrator.de/contentid/576723

Ausgedruckt am: 08.11.2024 um 21:11 Uhr

beidermachtvongreyscull
beidermachtvongreyscull 05.06.2020 um 04:16:47 Uhr
Goto Top
Senseless-Creature
Senseless-Creature 05.06.2020 um 06:10:01 Uhr
Goto Top
Danke für deine Antwort, aber das hilft nicht weiter. Das VBS läuft bereits als „elevated“ und das CMD auch.
144260
Lösung 144260 05.06.2020 aktualisiert um 09:56:07 Uhr
Goto Top
allerdings werden die Ordner in %temp% nicht gelöscht
Was erwartest du von del, das löscht nun mal nur Dateien und keine Ordner face-smile. Außerdem kannst du eben keine Ordner löschen in denen noch offene Dateihandles vorhanden sind, dafür müsste man erst die Handles abschießen.
und das CMD-Fenster soll sich nach dem löschen wieder schließen
Warum verwendest du dann /k als Parameter und nicht /c ?? face-smile Einfach mal cmd /? eintippeln hätte dafür gereicht ...
/C      Führt den Befehl in der Zeichenfolge aus und endet dann.
/K      Führt den Befehl in der Zeichenfolge aus und endet dann nicht.

CreateObject("Shell.Application").ShellExecute "cmd.exe", "/c rd ""%TEMP%"" /s /q &md ""%TEMP%"" >nul 2>&1", "", "runas", 1  
beidermachtvongreyscull
beidermachtvongreyscull 05.06.2020 um 08:56:58 Uhr
Goto Top
Wann möchtest Du denn die %temp%-Struktur löschen?
Es besteht nämlich bis zum Abmelden einer Sitzung gerne das Problem, dass Prozesse noch den Zugriff auf Dateien sperren.
emeriks
emeriks 05.06.2020 um 10:31:06 Uhr
Goto Top
Ich werfe mal Löschen von Ordnern mittels Robocopy in den Raum.

  1. man erstelle einen neuen, leeren Temp-Ordner
  2. man spiegele diesen neuen, leeren Temp-Ordner auf den zu löschenden Ziel-Ordner mittels Robocopy
  3. man löscht die Temp-Ordner und Ziel-Ordner

z.B.
set %tempdir%=C:\leer
set %destdir%=C:\ZuLoeschen
md "%tempdir%"  
robocopy "%tempdir%" "%destdir%" /MIR /B /R:0 /W:0 /NP /MT   
rd /s /q "%tempdir%"  
rd /s /q "%destdir%"  
Senseless-Creature
Senseless-Creature 05.06.2020 aktualisiert um 11:57:52 Uhr
Goto Top
Manchmal sieht man den Wald vor lauter Bäumen nicht - Ich hatte es jetzt erst mit „& Exit“ und „, True“ gelöst, aber mit deinem Tip konnte ich das ganze jetzt folgendermaßen lösen.

WshShell.Run "cmd.exe /c del /F /S /Q %temp%", 1, True   

Vielen Dank für deinen Hinweis zu /k und /c - kannte ich zwar aus der Powershell aber manchmal ist man „betriebsblind“ face-smile
LG