psexec workaround for installing msi packages to remote computers

Hatte einige Probleme eine msi Datei per psexec auf einen remote Rechner mit msiexec zu installieren.
Mein Befehl war „psexec.exe \\REMOTEHOST -u ADMIN -p ADMINPASSWORT -s -d msiexec /i \\APPHOST\FOLDER\7z922-x64.msi /q“. Der hat anscheinend die Datei nicht gefunden. Habe ich auf dem remote Rechner „msiexec /i \\APPHOST\FOLDER\7z922-x64.msi /q“ ausgeführt hat es aber funktioniert…

Nach langem hin und her war hab ich eine adäquate Alternative gefunden um das Problem zu umgehen. Ich mappe den Temp Ordner vom remote Rechner, kopiere die msi dort hinein und starte dann den obigen Befehl ohne UNC Pfad aber mit absoluten lokalen Pfad. Um es mir einfacher zu machen habe ich mir gleich eine batch Datei geschrieben (psexec muss im PATH sein…):

<pre>@echo off

set admin=Administrator
set passwd=
set hostname=%1
set absolutePathToFile=%2
set absolutePath=%3
set filename=%~n2
set filenameextension=%~x2

if %1!==! goto error5
if %2!==! goto error5
if %3!==! goto onefileprocessing

:folderprocessing
REM share einhängen
net use \\%hostname%\c$\Windows\Temp %passwd% /user:%admin%
if errorlevel 1 goto error1
REM gewuenschte datei auf den remote rechner kopieren
xcopy /H /E /Y %absolutePath% \\%hostname%\c$\Windows\Temp
if errorlevel 1 goto error2
REM installieren der software
psexec.exe \\%hostname% -u %admin% -p %passwd% msiexec /norestart /i C:\Windows\Temp\%filename%%filenameextension%
if errorlevel 1 goto error3
REM aushängen des shares
net use \\%hostname%\c$\Windows\Temp /d
if errorlevel 1 goto error4
REM deinstallieren von software würde so gehen
REM psexec.exe \\%hostname% -u %admin% -p %passwd% msiexec /x {61EF76AE-6CC9-4EFC-B788-6845C0BCEF00} /quiet
goto end

:onefileprocessing
REM share einhängen
net use \\%hostname%\c$\Windows\Temp %passwd% /user:%admin%
if errorlevel 1 goto error1
REM gewuenschte datei auf den remote rechner kopieren
xcopy /Y %absolutePathToFile% \\%hostname%\c$\Windows\Temp
if errorlevel 1 goto error2
REM installieren der software
psexec.exe \\%hostname% -u %admin% -p %passwd% msiexec /norestart /i C:\Windows\Temp\%filename%%filenameextension% /q
if errorlevel 1 goto error3
REM aushängen des shares
net use \\%hostname%\c$\Windows\Temp /d
if errorlevel 1 goto error4
REM deinstallieren von software würde so gehen
REM psexec.exe \\%hostname% -u %admin% -p %passwd% msiexec /x {61EF76AE-6CC9-4EFC-B788-6845C0BCEF00} /quiet

goto end
:error1
echo Fehler beim einhängen des remote ordners
:error2
echo Fehler beim kopieren auf remote machine
:error3
echo Fehler beim installieren der Software
:error4
echo Fehler beim aushängen des remote ordners
:error5
echo Bitte als ersten Parameter den Hostnamen angeben (z.B. REMOTEHOST) und als Zweiten den absoluten Pfad zur Datei die installiert werden soll (z.B. H:\apps\7z922-x64.msi)
echo In Ordnernamen duerfen keine Punkte sein...
:end</pre>

Musste noch ein drittes Argument mit aufnehmen damit ich eine Unterscheidung hab ob ich jetzt ein ganzes Verzeichnis kopieren muss oder nur eine Datei (z.B. bei der java, wo es jre1_6_0_27.msi und Data1.cab für die Installation braucht). Außerdem gabs Probleme wenn die Datei im Namen Punkte hatte. Er meinte nach dem Ersten Punkt, dass alles was danach kommt eine Dateiendung ist… also verwend ich keine Punkte im Dateinamen.

Das ganze schaut dann so aus wenn man es ausführt:

Schreibe einen Kommentar

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