kleine Softwareverteilung mit Psexec realisieren
01.11.2008
16:44:59 Uhr15037 Aufrufe
2 Antworten
16:44:59 Uhr
2 Antworten
Noch nicht bewertet
Vorab - dieses Tutorial erhebt keinerlei Anspruch auf Vollständigkeit und realisierbarkeit in jedem (Windows) Netzwerk.
Wurden bei der Planung die wichtigsten Standards eingehalten - dann spricht (außer einer ausgewachsenen Softwareverteilung) nichts gegen den Einsatz.
Wurden bei der Planung die wichtigsten Standards eingehalten - dann spricht (außer einer ausgewachsenen Softwareverteilung) nichts gegen den Einsatz.
Inhaltsverzeichnis
Wir brauchen zuerst einmal Psexec aus den PSTools von Mark Russinovich.
Dann müssen wir die Struktur unseres Netzwerkes "kennen".
Sinnvollerweise haben wir eine Liste aller Netzwerkclients z.B per BGinfo bereits in der Hinterhand.
Wenn nicht - auch nicht tragisch - dann erstellen wir uns auf die schnelle eine.
Natürlich ist man immer im Vorteil, wenn man schon eine Liste hat - in der Computername und zumindestens die Mac Adresse stehen.
Dann kann man "seine" Clients am Wochenende schön einfach per Wake On Lan aufwecken.
Seinen "Job" erledigen und die Systeme mit Shutdown (aus dem Reskit von Windows / oder bereits bei XP dabei) nach getaner Arbeit herunterfahren.
Hat / oder will man das nicht - sondern muß "schnell" etwas auf allen Clients durchführen - dann würde es folgendermaßen funktionieren:
Clients mit einheitlichem Namen
Sind die Clientnamen "ähnlich" strukturiert - Sprich FirmaWorkstationNummer - dann hilft uns dieser Ansatz - alle aktiven System zu finden und dort per PSexec (z.B) eine cmd auszuführen:01.
FOR /L %%i IN (1,1,999) DO ( 02.
Rem Ab Hier werden die Rechner ohne führende 0 gefunden 03.
if %%i LEQ 999 SET Ws=FirmaW^^orkstation 04.
Rem Hier muß etwas getrixt werden, wenn es Systeme gibt - die mit einer führenden "0" anfangen 05.
if %%i LEQ 99 SET Ws=FirmaW^^orkstation0 06.
Rem Hier muß etwas getrixt werden, wenn es Systeme gibt - die mit zwei führenden "0"len anfangen 07.
if %%i LEQ 9 SET Ws=FirmaW^^orkstation00 08.
@title %Ws%%%i 09.
ping -n 1 -w 5 %Ws%%%i|find "TTL=" && psexec \\%Ws%%%i -u Domain\domainadmin -p Password -c "\\server\freigabe\meine.cmd" 10.
)Soweit so gut - nun haben wir diverse Systeme (diejenigen, die zum jeweiligen Zeitpunkt aktiv waren) - mit einem Job betraut.
Wie stellen wir sicher, daß beim erneuten Lauf kein System doppelt den Job (\\server\freigabe\meine.cmd) durchführt?
01.
Rem dazu auf \\server\freigabe\ eine "ferig" Datei erstellen 02.
@if not exist \\server\freigabe\ready.ini @echo .>>\\server\freigabe\ready.ini 03.
Rem Ist der Rechner bereits in der Liste eingetragen? 04.
@ findstr %computername% \\server\freigabe\ready.ini >nul 05.
@if not %errorlevel%==1 goto end 06.
rem setzte den %errorlevel% zurück 07.
@color cf 08.
Rem vergleiche die hostst Datei 09.
fc \\server\freigabe\hosts. %windir%\system32\drivers\etc\hosts. 10.
if not %errorlevel%==0 goto hostst 11.
goto end 12.
:hostst 13.
@color cf 14.
@copy /y \\server\freigabe\hosts. %windir%\system32\drivers\etc\hosts. >nul && if %errorlevel%==0 echo %computername% Hosts kopiert>>\\server\freigabe\ready.ini || echo %computername% Hosts nicht kopiert>>\\server\freigabe\notready.ini 15.
:end 16.
Rem eine unsortierte Liste - macht keinen Spass ;-) 17.
sort \\server\freigabe\ready.ini /o \\server\freigabe\ready.txt 18.
copy \\server\freigabe\ready.txt \\server\freigabe\ready.ini 19.
@exitClients in einem bestimmten IP Bereich
01.
Rem "fast" identisch mit dem vorherigen Ansatz - nur findet dieser Ansatz auch Netzwerkdrucker, Server und Switche - von daher mit "Vorsicht" zu genießen 02.
SET ip=192.168.0. 03.
FOR /L %%i IN (10,1,254) DO ( 04.
title %ip%%%i 05.
ping -n 1 -w 5 %ip%%%i|find "TTL=" && psexec \\%ip%%%i -u Domain\domainadmin -p Password -c "\\server\freigabe\meine.cmd" 06.
)Clients in einem bestimmten IP Bereich (die eine Freigabe c$ haben)
Wobei der Fairness halber dazu geschrieben werden muß:- das diese Alternative extrem Zeitaufwenig ist
- und ich diese "Alternative" nicht wirklich im produktiven Einsatz benutzen würde.
01.
SET ip=192.168.0. 02.
FOR /L %%i IN (10,1,254) DO ( 03.
title %ip%%%i 04.
echo y|net use \\%ip%%%i\c$>c:\test.txt 05.
findstr "Benutzernamen" c:\test.txt && psexec \\%ip%%%i -u Domain\domainadmin -p Password -c "\\server\freigabe\meine.cmd" 06.
)Wie Stelle ich sicher, daß kein Client vergessen wurde?
Ohne eine komplette Liste aller Clients wird das schwierig - da ich damit keine Erfahrung habe (Ich bin im Besitz einer kompletten Liste) kann ich diese Frage nicht aus dem Stehgreif beantworten.Eine komplette Liste kann man sich jedoch mittels LDIFDE oder NETSH DHCP SERVER export \\server\freigabe\complete.ini all besorgen.
Ps:
Vielen Dank an diejenigen im Forum, die mich auf die Idee gebracht haben und noch mehr dank an diejenigen, die mein Wissen erweitert haben.
Ps²
"Selbstverständlich" ist dieses Script nicht wirklich haargenauso im Einsatz - ich habe es mal dazu benutzt das Bios der Clients zu aktualisieren.
dog schreibt am 02.11.2008 um 04:27:34 Uhr
Hallo,
schöne Anleitung
Ich würde allerdings den Status ob ein Client eine Software bereits installiert hat nicht auf dem Server sondern auf dem Client speichern, aus zwei Gründen:
a. Clients können neu installiert werden und brauchen die Software erneut
b. Es gibt Wächtersysteme, die die PCs automatisch zurücksetzen - während die Software also aus Serversicht installiert ist, muss das auf dem Client nicht der Fall sein.
Evtl. wäre hier eine Duale Lösung gut: Log auf dem Server, eigentlicher Status auf dem Client.
Grüße
Max
schöne Anleitung
Ich würde allerdings den Status ob ein Client eine Software bereits installiert hat nicht auf dem Server sondern auf dem Client speichern, aus zwei Gründen:
a. Clients können neu installiert werden und brauchen die Software erneut
b. Es gibt Wächtersysteme, die die PCs automatisch zurücksetzen - während die Software also aus Serversicht installiert ist, muss das auf dem Client nicht der Fall sein.
Evtl. wäre hier eine Duale Lösung gut: Log auf dem Server, eigentlicher Status auf dem Client.
Grüße
Max
TimoBeil schreibt am 02.11.2008 um 10:46:06 Uhr
Merci vielmals für das Lob 
Ich würde allerdings den Status ob ein Client eine Software
bereits installiert hat nicht auf dem Server sondern auf dem Client
speichern, aus zwei Gründen:
a. Clients können neu installiert werden und brauchen die
Software erneut
Für diesen Fall würde sich eine weitere Batch anbieten - die so aussehen könnte:
Evtl. wäre hier eine Duale Lösung gut: Log auf dem Server,
eigentlicher Status auf dem Client.
Grüße
Max
zurück 
Ich würde allerdings den Status ob ein Client eine Software
bereits installiert hat nicht auf dem Server sondern auf dem Client
speichern, aus zwei Gründen:
a. Clients können neu installiert werden und brauchen die
Software erneut
Für diesen Fall würde sich eine weitere Batch anbieten - die so aussehen könnte:
01.
Set /p renewjob = Software xy erneut installieren: 02.
find /v "%renewjob%" \\server\freigabe\ready.ini >> \\server\freigabe\ready.txt 03.
copy \\server\freigabe\ready.txt \\server\freigabe\ready.inib. Es gibt Wächtersysteme, die die PCs automatisch
zurücksetzen - während die Software also aus Serversicht
installiert ist, muss das auf dem Client nicht der Fall sein.
Aus diesem Grund habe in in der Batch - die auf dem Client ausgeführt wird - folgende Zeilen (ab 8) angedeutet:zurücksetzen - während die Software also aus Serversicht
installiert ist, muss das auf dem Client nicht der Fall sein.
01.
#Rem vergleiche die hostst Datei 02.
fc \\server\freigabe\hosts. %windir%\system32\drivers\etc\hosts. 03.
if not %errorlevel%==0 goto hostst 04.
goto end Evtl. wäre hier eine Duale Lösung gut: Log auf dem Server,
eigentlicher Status auf dem Client.
Grüße
Max












