cpau Jobs vom Netzlaufwerk starten – Installationen mit lokalen Administratorrechten vom Netzlaufwerk

cpau habe ich ja bereits vorgestellt. Sinn und Funktionsweise setze ich hier voraus 🙂

Das AusfĂŒhren von CPAU Jobs vom Netzlaufwerk funktioniert aufgrund von simplen Windows Sicherheitsprinzipien nicht. Schließlich hat ein lokales Administratorkonto kein Zugriff auf Netzlaufwerke, die ja einen DomĂ€nenaccount benötigen. Also brauche ich ein Workaround, wenn ich automatisierte Softwareinstallationen auf einem UNC Share im Unternehmen bereitstellen will.

Ziel soll es sein, jedem eingeschrÀnkten Nutzer Admin-Softwareinstallationen dank CPAU vom Netzlaufwerk aus bereitzustellen:

So wird es dann aussehen. Der Nutzer bewegt sich auf dem Netzlaufwerk, starte eine Batch und die Installation mit Adminrechten wird gestartet.

Kurz zum VerstÀndnis:
Der Aufbau eines cpau Systems (mit Jobs) ist grundsÀtzlich recht einfach:
1 Batch Script ist fĂŒr den Benutzer („Userscript“). Bei Doppelklick fĂŒhrt es die gespeicherte Job Datei aus. Die Job Datei fĂŒhrt wiederum ein Login auf das Administratorkonto durch und startet eine Datei oder ein Script („Ziel-Datei/Installer“) mit den entsprechenden Rechten. FĂŒr den Benutzer mĂŒssen weder Job Datei noch die Ziel-Datei sichtbar sein.

Das Verzeichnis mit den Benutzerscripten und das Verzeichnis mit den Job- und Ziel-Dateien.

WĂ€ren Netzlaufwerke erlaubt mĂŒsste das Benutzerscript nur 1 Zeile haben:
bash“>“\\Server\Pfad\zu\cpau.exe“ -dec -file „\\Server\Pfad\zu\jobfile.job“ -nowarn -lwp

Das geht natĂŒrlich nicht. In der Job sind die Administratorcredentials gespeichert, beim Start von cpau wird das working dir auf einen lokalen Pfad gelegt und der Administrator kommt auch nicht mehr an den Server. Es bleibt nur eine Lösung: alles, was benötigt wird, lokal zu kopieren und damit lokal zu arbeiten.

Hier das Userscript:
winbatch“ line=“1″>
@echo off
echo Verzeichnis erstellen und reinigen
if not exist c:\temp md c:\temp >> nul
del c:\temp /f /s /q >> nul
echo Job Files und Ziel-Dateien lokal kopieren
copy \\Server\Pfad\zu\den\Installer\und\Jobfiles c:\temp /y >> nul
echo Lokale Jobfile ausfĂŒhren
c:\temp\cpau.exe -dec -file „c:\temp\notepad.job“ -nowarn -lwp
echo Verzeichnis löschen, 1 Ziel-Datei ist in Benutzung und bleibt ĂŒbrig
del %wdir% /f /s /q >> nul

Auch interessant:  Hidden File Finder - versteckte Dateien und Systemdateien finden (2020)

Das mag jetzt etwas unĂŒbersichtlich aussehen, ist aber ein einfaches Prinzip.
Es wird ein lokaler Ordner erstellt, falls noch nicht vorhanden. Der Inhalt des Ordners wird gelöscht, falls der Ordner existieren sollte und sich noch Dateien darin befinden. Dann wird der Ordner vom Netzlaufwerk, in dem Installer und Jobfiles liegen in diesen lokalen Ordner kopiert. Die nun lokal liegende Jobfile kann jetzt ausgefĂŒhrt werden. Danach wird der Ordnerinhalt gelöscht. Fertig.
Der Benutzer startet dieses Userscript vom Netzlaufwerk aus und bekommt von der ganzen lokalen Geschichte nichts mit, einige Sekunden spĂ€ter startet einfach die administrative Installation, die das Userscript schließlich ja hervorbringen sollte.

Nun mĂŒsst ihr das Jobfile speziell fĂŒr diesen Fall generieren. Erstellt euch den temporĂ€ren Ordner, falls noch nicht vorhanden. Pfad und Name genauso wie in dem Userscript benutzt. Kopiert dort den gewĂŒnschten Installer oder Ziel-Datei hinein und erstellt die Job File mit folgender Codezeile:
cpau.exe -u Administrator -p PaSsWoRt -ex „c:\temp\installer.exe“ -crc „c:\temp\installer.exe“ -enc -file „\\beliebiger\lokaler\oder\serverpfad\installer.job“

Wichtig ist, dass ihr die Jobfile mit den lokalen Pfaden der Ziel-Datei erstellt. Der Installer muss in dem selben lokalen Verzeichnis liegen, wie die Dateien durch das Userscript kopiert werden.

Ich nutze das System, wie man auf den Screenshots oben sieht, bereits produktiv im Unternehmen und es kommt sehr gut bei den Mitarbeitern an. Sollte es ĂŒber einfache Aufgaben hinausreichen, bietet es sich an, das Script zu verbessern. Hier ist meine Version des Userscripts:
winbatch“ line=“1″>
@echo off
echo Variablen erstellen…
set log=\\server\laufwerk\Computer\Software\GPOs_Install\PC-Data\Updatelogs\Programmupdates.txt
set wdir=c:\updatetemp
set updatedir=\\server\laufwerk\Computer\Software\GPOs_Install\Updates\
set /a loop=0
echo Verzeichnis erstellen, reinigen und kopieren…
echo %computername% – %username% – %date% %time% startet Notepad++ Installer >> %log%
if not exist %wdir% md %wdir% >> nul
del %wdir% /f /s /q >> nul
:kopieren
set /a loop=%loop%+1
if %loop%==4 goto :Fehler
copy „\\server\laufwerk\Computer\Software\cpau.exe“ %wdir% >> nul
if errorlevel 1 goto :kopieren
copy %updatedir% %wdir% /y >> nul
if errorlevel 1 goto :kopieren
echo Installation starten…
%wdir%\cpau.exe -dec -file „%wdir%\notepad.job“ -nowarn -lwp
echo Verzeichnis löschen…
del %wdir% /f /s /q >> nul
echo %computername% – %username% – %date% %time% beendet Notepad++ Installer >> %log%
echo ################ >> %log%
goto :eof

Auch interessant:  Passwörter zurĂŒcksetzen mit dem wohl einfachsten Windows Hack aller Zeiten (2019)

:Fehler
echo.
echo ### Fehler beim Kopieren ###
echo Bitte informieren Sie die EDV Abteilung.
pause
goto :eof

Alle Pfade werden in Variablen gespeichert und erleichtern die Übersicht im Script. Ein Logfile wird beim Start und beim Beenden einer Softwareinstallation (hier im Beispiel Notepad++) beschrieben und ermöglicht mir das (noch relativ grundlegende ^^) Troubleshooting, falls es zu Problemen kommen sollte. Der Kopiervorgang des Installer- und Jobordners wird mit errorlevel ĂŒberwacht und in einer Schleife wiederholt, sollte er fehlschlagen. SchlĂ€gt er zu oft fehl, wird eine Fehlermeldung ausgegeben. LĂ€uft alles gut (das war bis jetzt immer der Fall), so wird die Job gestartet und der lokal liegende Installer mit dem lokalen Administrator ausgefĂŒhrt.

Was der Benutzer sieht, zeige ich in dem Video ganz oben. Das passiert im Hintergrund:

Der Nachteil wird schnell klar: je mehr Softwareinstallationen ich bereitstelle und je grĂ¶ĂŸer die Produkte sind desto lĂ€nger dauert der Kopiervorgang fĂŒr jeden Benutzer bei jeder Installation, da immer der ganze Ordner kopiert wird. Das könnte man ganz leicht umgehen, in dem man in jedem Script nur die Dateien kopieren lĂ€sst, die auch wirklich benötigt werden, z.B. %programm%.job und %programm%.exe. Sollte ich das demnĂ€chst noch so programmieren werdet ihr es erfahren.

Bei Fragen und Anregungen mail me 🙂

9 Kommentare

  1. Ich hÀtte mal eine Frage zu folgendem Abschnitt aus dem Skript:

    :kopieren
    set /a loop=%loop%+1
    copy „\\server\laufwerk\Computer\Software\cpau.exe“ %wdir% >> nul
    if errorlevel 1 goto :kopieren
    if %loop%==3 goto :Fehler
    copy %updatedir% %wdir% /y >> nul
    if errorlevel 1 goto :kopieren
    if %loop%==3 goto :Fehler

    Wenn jetzt der errorlevel 1 ist, dann geht der wieder zu :kopieren und setzt loop hoch. Wenn das ganze dann wieder fehlschlĂ€gt (das wĂ€re ja dann wieder errorlevel 1 oder?) dann geht er wieder zu kopieren. Ist irgendwann der Errorlevel mal nicht 1, selbst wenn es fehlschlĂ€gt (wird der dann grĂ¶ĂŸer, also 2?), damit das Skript zur loop-Wert-Abfrage kommt?
    Ist dort ein Strukturfehler im Skript (Endlosschleife wenn das kopieren nicht geht)?
    Ich frage nur, da ich selber (fast) keine Ahnung von Batch-Skript habe, aber doch noch was dazu lernen will 😉

  2. Stimmt, die Absicherung lÀuft nicht, wenn das erste copy (cpau.exe) fehlschlagen sollte. Da muss noch gefeilt werden.

    Sinnvoller wÀre:

    :kopieren
    set /a loop=%loop%+1
    if %loop%==4 goto :Fehler
    copy “\serverlaufwerkComputerSoftwarecpau.exe” %wdir% >> nul
    if errorlevel 1 goto :kopieren
    copy %updatedir% %wdir% /y >> nul
    if errorlevel 1 goto :kopieren
    

    Jetzt mĂŒsste es fehlerfrei laufen, oder?

    edit: Danke ĂŒbrigends 🙂 Hab es im Artikel angepasst.

  3. Ich verstehe ehrlich gesagt nicht so ganz, was du mit dem Nachteil am Ende des Artikels meinst. Die Dateien sind doch alle fĂŒr das Programm wichtig – ansonsten wĂŒrden die doch nicht mitgeliefert werden. Selbst wenn du es hinkriegen wĂŒrdest, nur den Installer runterladen zu mĂŒssen, dann wĂŒrde dieser selbststĂ€ndig alle weitere Dateien transparent nachladen mĂŒssen – die Menge der ĂŒbertragenen Dateien bleibt also gleich (nur das du im zweiten Fall nicht selber fĂŒr die Übertragung zustĂ€ndig bist).

  4. Da hast du mich missverstanden.
    Es geht um den Befehl
    copy %updatedir% %wdir% /y >> nul
    dieser kopiert das Updateverzeichnis, im dem die Installer liegen, in das Working Directory, lokal auf C.
    Der Befehl copy kopiert den kompletten Ordnerinhalt.
    Der Updateverzeichnis beinhaltet aber mittlerweile einige Programminstaller und jobs und es werden momentan wöchentlich mehr Programme, die wir mit dieser Methode freigeben.
    Und da jedes mal der komplette Ordnerinhalt kopiert wird, und nicht nur der 1 Installer, der fĂŒr das Programm nötig wĂ€re, dauert der Kopiervorgang immer lĂ€nger, bevor die Installation startet.
    Besser wÀre immer
    copy %updatedir%\programm.exe %wdir% /y >> nul
    copy %updatedir%\programm.job %wdir% /y >> nul
    Somit wĂŒrde immer nur der Teil des Ordners kopiert, der benötigt wird.
    Das ergÀnze ich vielleicht noch.

  5. Die Arbeit am Computer ist schön und gut, aber ich finde, dass man bei solch einem Job ganz dringend einen Ausgleich in Form von sportlichen AktivitĂ€ten benötigt. Hier sollten viele Unternehmen noch viel mehr fĂŒr ihre Mitarbeiter anbieten.

  6. Was hat das jetzt mit dem Thema zu tun? Inwiefern sich jeder IT Mitarbeiter in seiner Freizeit sportlich betĂ€tigt ist doch jedem selbst ĂŒberlassen. Man kann Nachmittag zu McFit gehen oder man kann es lassen aber es ist ja wohl kaum Pflicht des Arbeitgebers sich um die sprtlichen AktivitĂ€ten der Arbeitnehmer zu kĂŒmmern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.