PsExec (Remote auf Win7) liefert Invalid Handle bei zweitem Aufruf
Hallo,
ich möchte in einer Windows Server 2003 Domänen Umgebung von diesem Server aus, auf verschieden Windows XP und Windows 7 Clients mehrere Setups remote mittels PsExec installieren. Auf den XP Rechnern klappt alles prima. Bei den Windows 7 Clients gibt es aber das folgend beschriebene Problem.
Nachdem die Rechner hochgefahren wurden, beginnt die Installation. Zuerst sollen 7 Uninstaller aufgerufen werden, anschließende 7 Setups. Der erste Aufruf funktioniert, danach bekomme ich aber bei mehreren Aufrufen die Meldung "Das Handle ist ungültig" angezeigt. Dies kann für die folgenden 13 Aufrufe anhalten, kann aber auch schon nach 3 Aufrufen vorbei sein. Danach funktiert alles wie es soll. Ein weiteres ausführen der Routine funktioniert ohne Probleme. Erst nach einem Neustart tritt das Problem wieder auf. Dabei ist auch unerheblich wie viel Zeit zwischen Hochfahren und Installation vergangen ist.
Das Problem zeigt sich auf allen Windows 7 Rechnern. Alle Clients sind in der Domäne Auf allen Win7 Clients habe ich bereits das autotuninglevel auf disabled gesetzt.
Hier ein Auszug aus der Batch Datei:
Edit: die Optionen -h und -s sind während meiner Tests hinzugefügt worden, haben aber keine Auswirkungen gehabt.
ich möchte in einer Windows Server 2003 Domänen Umgebung von diesem Server aus, auf verschieden Windows XP und Windows 7 Clients mehrere Setups remote mittels PsExec installieren. Auf den XP Rechnern klappt alles prima. Bei den Windows 7 Clients gibt es aber das folgend beschriebene Problem.
Nachdem die Rechner hochgefahren wurden, beginnt die Installation. Zuerst sollen 7 Uninstaller aufgerufen werden, anschließende 7 Setups. Der erste Aufruf funktioniert, danach bekomme ich aber bei mehreren Aufrufen die Meldung "Das Handle ist ungültig" angezeigt. Dies kann für die folgenden 13 Aufrufe anhalten, kann aber auch schon nach 3 Aufrufen vorbei sein. Danach funktiert alles wie es soll. Ein weiteres ausführen der Routine funktioniert ohne Probleme. Erst nach einem Neustart tritt das Problem wieder auf. Dabei ist auch unerheblich wie viel Zeit zwischen Hochfahren und Installation vergangen ist.
Das Problem zeigt sich auf allen Windows 7 Rechnern. Alle Clients sind in der Domäne Auf allen Win7 Clients habe ich bereits das autotuninglevel auf disabled gesetzt.
Hier ein Auszug aus der Batch Datei:
set CLIENT=winxp_rechner1 winxp_rechner2 winxp_rechner3 win7_rechner1 win7_rechner2 win7_rechner3 win7_rechner4
for %%C in (%CLIENT%) do (
echo.
echo -----------------------------------------------
echo Installation der Setups auf %%C
echo -----------------------------------------------
D:\psexec -h -s \\%%C D:\uninstall1.exe
D:\psexec -h -s \\%%C D:\uninstall2.exe
D:\psexec -h -s \\%%C D:\uninstall3.exe
D:\psexec -h -s \\%%C D:\uninstall4.exe
D:\psexec -h -s \\%%C D:\uninstall5.exe
D:\psexec -h -s \\%%C D:\uninstall6.exe
D:\psexec -h -s \\%%C D:\uninstall7.exe
D:\psexec -h -s \\%%C D:\setup1.exe
D:\psexec -h -s \\%%C D:\setup2.exe
D:\psexec -h -s \\%%C D:\setup3.exe
D:\psexec -h -s \\%%C D:\setup4.exe
D:\psexec -h -s \\%%C D:\setup5.exe
D:\psexec -h -s \\%%C D:\setup6.exe
D:\psexec -h -s \\%%C D:\setup7.exe
)
Edit: die Optionen -h und -s sind während meiner Tests hinzugefügt worden, haben aber keine Auswirkungen gehabt.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 310241
Url: https://administrator.de/contentid/310241
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
4 Kommentare
Neuester Kommentar
Hi,
ich tippe auf ein "einfaches" Timing Problem. Der Psexec-Dienst wird auf dem Zielcomputer dabei mehrfach installiert, gestartet, gestoppt und wieder deinstalliert.
Warum nicht erst ein Script erstellen/kopieren und dann dieses ausführen? Dann hast Du nur einen Aufruf.
E.
ich tippe auf ein "einfaches" Timing Problem. Der Psexec-Dienst wird auf dem Zielcomputer dabei mehrfach installiert, gestartet, gestoppt und wieder deinstalliert.
Warum nicht erst ein Script erstellen/kopieren und dann dieses ausführen? Dann hast Du nur einen Aufruf.
set CLIENT=winxp_rechner1 winxp_rechner2 winxp_rechner3 win7_rechner1 win7_rechner2 win7_rechner3 win7_rechner4
for %%C in (%CLIENT%) do (
echo.
echo -----------------------------------------------
echo Installation der Setups auf %%C
echo -----------------------------------------------
echo D:\uninstall1.exe > \\%%C\C$\install.cmd
echo D:\uninstall2.exe >> \\%%C\C$\install.cmd
echo D:\uninstall3.exe >> \\%%C\C$\install.cmd
......
......
D:\psexec -h -s \\%%C cmd.exe /c C:\install.cmd
)
E.
Aus http://windowsitpro.com/systems-management/psexec (vom Entwickler persönlich):
Inside PsExec
PsExec starts an executable on a remote system and controls the input and output streams of the executable's process so that you can interact with the executable from the local system. PsExec does so by extracting from its executable image an embedded Windows service named Psexesvc and copying it to the Admin$ share of the remote system. PsExec then uses the Windows Service Control Manager API, which has a remote interface, to start the Psexesvc service on the remote system.
The Psexesvc service creates a named pipe, psexecsvc, to which PsExec connects and sends commands that tell the service on the remote system which executable to launch and which options you've specified. If you specify the -d (don't wait) switch, the service exits after starting the executable; otherwise, the service waits for the executable to terminate, then sends the exit code back to PsExec for it to print on the local console.
Inside PsExec
PsExec starts an executable on a remote system and controls the input and output streams of the executable's process so that you can interact with the executable from the local system. PsExec does so by extracting from its executable image an embedded Windows service named Psexesvc and copying it to the Admin$ share of the remote system. PsExec then uses the Windows Service Control Manager API, which has a remote interface, to start the Psexesvc service on the remote system.
The Psexesvc service creates a named pipe, psexecsvc, to which PsExec connects and sends commands that tell the service on the remote system which executable to launch and which options you've specified. If you specify the -d (don't wait) switch, the service exits after starting the executable; otherwise, the service waits for the executable to terminate, then sends the exit code back to PsExec for it to print on the local console.
Was genau meinst du mit installiert und deinstalliert? Jedesmal, wenn ich PsExec aufrufe, wird es auf der gegenüberliegenden Seite installiert und wieder deinstalliert??
Ja.Ich habe noch 2 Ergänzungen. Ich habe das Problem sowohl mit einer älteren Version von PsExec (1.x) als auch mit der aktuellen (2.2). Ich habe nach dem ersten Aufruf von PsExec nun mal ein timeout /t 5 eingebaut. Nun läuft die Installation zuverlässig. Richtig schön finde ich die Lösung aber noch nicht.
Kann man so machen. Wenn man soviel Zeit hat.Ich selbst bevorzuge den Weg mit dem Script auf dem Remote PC. Habe jetzt aktuell mal wieder ein Projekt, wo ich es genau so mache.
Des Weiteren würde ich gerne verstehen, was das Problem ist.
Die lokale Batch startet Psexec. Wenn Psexec beendet, dann macht die Batch weiter mit der nächsten PSexec-Zeile. Auf der Gegenseite am Remote PC kann es aber sein, dass dieser noch mit dem Entfernen des PSexec beschäftigt ist. Dadurch läuft der erneute Aufruf des PSexec auf einen Fehler. Mit der jetzt von Dir eingebauten Pause wartest Du pauschal 5 Sekunden, in der Hoffnung, dass es inzwischen auf der Gegenseite fertig ist. Kann aber auch schiefgehen, wenn die Pause zu kurz ist.