Domäne PCs durchsuchen und eine Datei ersetzen
Guten Tag zusammen,
zuerst möchte ich die Gelegenheit nutzen, um mich beim allen Helfer hier zu bedanken. Bis heute habe ich immer eine Antwort auf meiner Fragen gefunden, ohne dafür einen Beitrag schreiben zu müssen.
Zu meinem jetzigen Problem:
habe natürlich bereits nach einer Lösungen gesucht aber nichts gefunden. Und jetzt bin ich mir nicht mehr sicher ob überhaupt so was möglich ist.
Das Problem:
Wir haben in unsere Domäne sich ca. 1000 Clients. Auf ungefähr 200 davon ist ein CAD Programm installiert und in dessen Verzeichnis muss ich eine Datei ersetzen.
Meine Vorstellung:
Schritt 1. Eine Liste mit Ps's aus bestimmte OU erstellen.
Schritt 2. Auf PCs nach der Datei suchen und diese ersetzen ( ich weiß nicht auf welcher PCs dass Programm installiert wurde. Und auch der Installation Pfad ist unterschiedlich.
Schritt 3. Log files erstellen.
Fragen:
Ist so etwas überhaupt möglich? Am besten mit einer Bachdatei.
Warum? Damit kenne ich mich zumindest ein wenig aus. Außer jemand hat bereits was Fertiges.
Ich würde gerne die Bachdatei NICHT an den PCs verteilen, sonder das ganze wirklich als Stapelverarbeitung in Netzwerk laufen lassen. (PS's - pingen – verbinden – durchsuchen – Dateiersetzen – Ergebnis in Log Datei schreiben)
Für euer mühe bin euch dankbar.
Mfg
xxs
zuerst möchte ich die Gelegenheit nutzen, um mich beim allen Helfer hier zu bedanken. Bis heute habe ich immer eine Antwort auf meiner Fragen gefunden, ohne dafür einen Beitrag schreiben zu müssen.
Zu meinem jetzigen Problem:
habe natürlich bereits nach einer Lösungen gesucht aber nichts gefunden. Und jetzt bin ich mir nicht mehr sicher ob überhaupt so was möglich ist.
Das Problem:
Wir haben in unsere Domäne sich ca. 1000 Clients. Auf ungefähr 200 davon ist ein CAD Programm installiert und in dessen Verzeichnis muss ich eine Datei ersetzen.
Meine Vorstellung:
Schritt 1. Eine Liste mit Ps's aus bestimmte OU erstellen.
Schritt 2. Auf PCs nach der Datei suchen und diese ersetzen ( ich weiß nicht auf welcher PCs dass Programm installiert wurde. Und auch der Installation Pfad ist unterschiedlich.
Schritt 3. Log files erstellen.
Fragen:
Ist so etwas überhaupt möglich? Am besten mit einer Bachdatei.
Warum? Damit kenne ich mich zumindest ein wenig aus. Außer jemand hat bereits was Fertiges.
Ich würde gerne die Bachdatei NICHT an den PCs verteilen, sonder das ganze wirklich als Stapelverarbeitung in Netzwerk laufen lassen. (PS's - pingen – verbinden – durchsuchen – Dateiersetzen – Ergebnis in Log Datei schreiben)
Für euer mühe bin euch dankbar.
Mfg
xxs
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 139158
Url: https://administrator.de/contentid/139158
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
23 Kommentare
Neuester Kommentar
Servus,
schau u.a mal in meinen Beiträgen / Anleitungen da findest du .
Da ließt du dich mal ein und dann wirst du 99.9% deiner Fragen "irgendwie" beantwortet bekommen.
Wobei ein zehntel Prozentpunkte dann natürlich fieserweise
Nicht wirklich nett werden.
Gruß
schau u.a mal in meinen Beiträgen / Anleitungen da findest du .
Da ließt du dich mal ein und dann wirst du 99.9% deiner Fragen "irgendwie" beantwortet bekommen.
Wobei ein zehntel Prozentpunkte dann natürlich fieserweise
Und auch der Installation Pfad ist unterschiedlich.
Nicht wirklich nett werden.
Gruß
Jo,
und wenn du rausfindest, ob das CAD Programm sich in der Reg verankert hat und dort seinen Install Pfad hinterlegt hat - oder ob es im Pfad liegt - macht es dann leichter.
Hallo!
ich geb jetzt auch mal meinen Senf dazu...
auch wenn Du das Script von TimoBeil (das im übrigen bemerkenswert praktisch sein dürfte!) zum laufen bekommst, dann läuft ja lediglich die meine.cmd ab.
And now?
Hier beginnt Dein Problem doch erst, oder?
Falls Du von Deinen ursprünglichen Plan:
Ich hab ein ähnliches Problem mit vbs gelöst (aber das Script halt in der Firma, weil issa schon Wochänändä...)
Mein Lösungsansatz:
per Gruppenrichtlinie wird diese .vbs beim Systemstart aufgerufen.
Die prüft, ob die Datei vorhanden ist, falls dem so ist, wird sie umbenannt und die neue Datei auf das System kopiert (bei mir gings um ein Lizenzfile). Dadurch stellt das auch kein Problem dar, wenn dieses Script auf einem Client aufgerufen wird, der die Software nicht installiert hat)
Abschliessend wird am Server eine log-Datei erstellt, in die der Client eingetragen wird...
Bei mir waren die Pfade halt auf allen Rechnern gleich...
Falls Du für das Pfadthema schon eine Lösung hast, dann wäre mein Ansatz für Dich ja brauchbar. (Ich denke nebenbei, so viele unterschiedliche Möglichkeiten gibts da ja vermutlich auch nicht... Such halt von jedem Beschaffungsjahr einen Rechner und notiere dir den Pfad, dann wirst Du die meisten Pfade schon kennen, denke ich...
ausserdem: wie kreativ könnt ihr bei der Installation schon gewesen sein...
Ich denke, mit 2 bis 3 Varianten (englisch, deutsches System u sonstiges) kannst Du 99% abdecken, der Rest meldet sich dann ohnehin bei Dir, wenn CAD nicht mehr läuft...)
Gib Bescheid, wenn Du das Script brauchen kannst, dann stell ichs hier am Montag ab.
lg
Edi
ich geb jetzt auch mal meinen Senf dazu...
auch wenn Du das Script von TimoBeil (das im übrigen bemerkenswert praktisch sein dürfte!) zum laufen bekommst, dann läuft ja lediglich die meine.cmd ab.
And now?
Hier beginnt Dein Problem doch erst, oder?
Falls Du von Deinen ursprünglichen Plan:
Ich würde gerne die Bachdatei NICHT an den PCs verteilen, sonder das ganze wirklich als Stapelverarbeitung in Netzwerk laufen lassen.
abrücken kannst / musst, hilft vielleicht folgendes:Ich hab ein ähnliches Problem mit vbs gelöst (aber das Script halt in der Firma, weil issa schon Wochänändä...)
Mein Lösungsansatz:
per Gruppenrichtlinie wird diese .vbs beim Systemstart aufgerufen.
Die prüft, ob die Datei vorhanden ist, falls dem so ist, wird sie umbenannt und die neue Datei auf das System kopiert (bei mir gings um ein Lizenzfile). Dadurch stellt das auch kein Problem dar, wenn dieses Script auf einem Client aufgerufen wird, der die Software nicht installiert hat)
Abschliessend wird am Server eine log-Datei erstellt, in die der Client eingetragen wird...
Bei mir waren die Pfade halt auf allen Rechnern gleich...
Falls Du für das Pfadthema schon eine Lösung hast, dann wäre mein Ansatz für Dich ja brauchbar. (Ich denke nebenbei, so viele unterschiedliche Möglichkeiten gibts da ja vermutlich auch nicht... Such halt von jedem Beschaffungsjahr einen Rechner und notiere dir den Pfad, dann wirst Du die meisten Pfade schon kennen, denke ich...
ausserdem: wie kreativ könnt ihr bei der Installation schon gewesen sein...
Ich denke, mit 2 bis 3 Varianten (englisch, deutsches System u sonstiges) kannst Du 99% abdecken, der Rest meldet sich dann ohnehin bei Dir, wenn CAD nicht mehr läuft...)
Gib Bescheid, wenn Du das Script brauchen kannst, dann stell ichs hier am Montag ab.
lg
Edi
... und wenn's tatsächlich nur um das Austauschen einer Datei geht, hat der BS-Hersteller sogar mitgedacht:
Defaultmäßig wird damit nur ersetzt, wenn's was zu ersetzen gibt (außer Du verwendest "/A"), das aber dann in allen Unterordnern ("/S") und auf Wunsch nur für ältere Dateien ("/U") ...
Grüße
bastla
replace /?
Grüße
bastla
Hallo!
Aufgrund des Tipps von bastla nun folgender Lösungsansatz (hat nun mit meinem gestrigen Vorschlag in vbs nix mehr zu tun...)
login.bat (die du per GPO beim Systemstart laufen lässt)
Annahmen:
SERVER1 ist der Server, auf dem die logdatei erstellt wird bzw. die neue Lizenzdatei liegt
die lizenzdatei nennt sich lizenz.txt
(wenn zu erwarten ist, dass es am Client nur eine einzige Datei gibt, die lizenz.txt heisst, dann kommst Du auch mit einem Replace-Befehl aus)
Vergiss nicht, die NTFS-Rechte auf der CADlog.txt entsprechend zu setzen...
alternativ dazu (und vermutlich aussagekräftiger):
alles ungetestet!
lg und erholsames WE
Edi
Aufgrund des Tipps von bastla nun folgender Lösungsansatz (hat nun mit meinem gestrigen Vorschlag in vbs nix mehr zu tun...)
login.bat (die du per GPO beim Systemstart laufen lässt)
Annahmen:
SERVER1 ist der Server, auf dem die logdatei erstellt wird bzw. die neue Lizenzdatei liegt
die lizenzdatei nennt sich lizenz.txt
(wenn zu erwarten ist, dass es am Client nur eine einzige Datei gibt, die lizenz.txt heisst, dann kommst Du auch mit einem Replace-Befehl aus)
Vergiss nicht, die NTFS-Rechte auf der CADlog.txt entsprechend zu setzen...
md c:\temp1
replace \\server1\share\lizenz.txt c:\programme\CAD /S >>c:\temp1\echo.txt
replace \\server1\share\lizenz.txt c:\programs\CAD /S >>c:\temp1\echo.txt
find /c /i "1" c:\temp1\echo.txt
if errorlevel 1 goto Ente
echo %computername% >>\\server1\share\CAD_log.txt
Goto Ente
:Ente
del c:\temp1\echo.txt
rd c:\temp1
alternativ dazu (und vermutlich aussagekräftiger):
md c:\temp1
replace \\server1\share\lizenz.txt c:\programme\CAD /S >>c:\temp1\echo.txt
replace \\server1\share\lizenz.txt c:\programs\CAD /S >>c:\temp1\echo.txt
set cont=
for /F "delims=" %%f in (c:\temp1\echo.txt) do (
set "cont=%%f am Client %computername%"
)
echo %cont% >>\\server1\share\log.txt
del c:\temp1\echo.txt
rd c:\temp1
alles ungetestet!
lg und erholsames WE
Edi
@urobe73
Um die Gesamtzahl aller Ersetzungen zu ermitteln, brauchst Du eigentlich keine Temp-Datei:
Der Parameter "/U" bei "
Noch eine kurze Anmerkung zum "
Grüße
bastla
Um die Gesamtzahl aller Ersetzungen zu ermitteln, brauchst Du eigentlich keine Temp-Datei:
@echo off & setlocal
set /a count=0
for %%i in (c:\programme\CAD c:\programs\CAD c:\CAD) do (
for /f %%a in ('replace \\server1\share\lizenz.txt %%i /S /U 2^>nul') do set /a count+=%%a
)
if %count% gtr 0 >>\\server1\share\log.txt echo %computername%;%date%;%count%
replace
" sollte dafür sorgen, dass nicht bei jedem Hochfahren erneut die Datei ersetzt und die Protokollierung vorgenommen wird - falls kein "/U" verwendet wird, könnte zumindest anhand des hinzugefügten Datums im (nachträglich sortierten) Log eine Mehrfacherfassung des jeweiligen Computers erkannt werden ...Noch eine kurze Anmerkung zum "
set /a count+=%%a
" für alle von "replace
" ausgegebenen Zeilen: Hier kann man sich zunutze machen, dass nur eine einzige (die letzte) Zeile mit einem Zahlenwert und einem Leerzeichen beginnen kann (und damit die Summe in %count% erhöht); für Text wie "Ersetzen" oder "Keine" wird hingegen jeweils 0 addiert ...Grüße
bastla
Hallo xxsadmin!
Übrigens: In Deiner Zeile 3 fehlt ein ">" (dafür könntest Du aber das "@" einsparen; und wenn bei ":ende" ohnehin nix mehr passiert, würde ich ein "
Grüße
bastla
P.S.: <code>-Tags machen geposteten Batch besser lesbar ...
Ich würde gerne aber in meiner Logdatei eintragen, wenn keine Datei ersetzt wurde. Wie könnte ich so was bewältigen?
Falls Du Dir einen der oben dargestellten Entwürfe etwas näher ansiehst (bei meinem Ansatz zB die Zeile 4), hättest Du eigentlich schon die gesuchte Lösung ...Übrigens: In Deiner Zeile 3 fehlt ein ">" (dafür könntest Du aber das "@" einsparen; und wenn bei ":ende" ohnehin nix mehr passiert, würde ich ein "
goto :eof
" bevorzugen).Grüße
bastla
P.S.: <code>-Tags machen geposteten Batch besser lesbar ...
Hallo xxsadmin!
Versuch es damit (weiterhin ungetestet ):
Wenn es nur einen möglichen Zielordner gibt, muss auch nicht "hochgezählt" werden - es genügt dann, der Variablen %count% den ersten Wert aus der letzten Zeile - dieser sollte ja entweder "Keine" oder "1" sein (außer in den Unterordnern des Zielordners befände(n) sich noch (eine) weitere "filegrup.dat") - einfach zuzuweisen, wobei "Keine" eben das numerische Ergebnis 0 liefert.
Noch als Anmerkung: Die Semikola als Trennzeichen zwischen %computername%, %date% und %count% verwende ich, um im Fall des Falles das Log einfach zB in Excel oder Access importieren zu können ...
Grüße
bastla
Versuch es damit (weiterhin ungetestet ):
@echo off & setlocal
REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\ISD Software und Systeme" >NUL 2>&1 && goto :ersetzen
echo HICAD nicht installiert %COMPUTERNAME% %DATE% %TIME% >>\\ccm01\dsm_netinstall\hicad\filedat_akt\fehler.log
GOTO :eof
:ersetzen
set /a count=0
FOR /F "tokens=3 SKIP=4" %%i IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\ISD Software und Systeme\HiCAD\3" /v HomeDir') DO (
for /f %%a in ('replace "\\ccm01\dsm_netinstall\hicad\filedat_akt\filegrup.dat" "%%i\exe" /S /U 2^>nul') do set /a count=%%a
)
if %count% gtr 0 (
>>\\ccm01\dsm_netinstall\hicad\filedat_akt\passt.log echo %computername%;%date%;%count%
) else (
>>\\ccm01\dsm_netinstall\hicad\filedat_akt\fehler.log echo Datei wurde nicht ersetzt: %COMPUTERNAME% %DATE% %TIME%
)
Noch als Anmerkung: Die Semikola als Trennzeichen zwischen %computername%, %date% und %count% verwende ich, um im Fall des Falles das Log einfach zB in Excel oder Access importieren zu können ...
Grüße
bastla
Hallo xxsadmin!
Die Schreibweise "
Grüße
bastla
Oder täusche ich mich?
Ja. Mit "2>&1
" werden Fehlermeldungen zum selben Ausgabekanal wie die "gewöhnlichen" Ausgaben ("STDOUT", Kanal 1) geschickt - hier war aber das Gegenteil gemeint: Fehlermeldungen sollten einfach verschwinden (deshalb eigens als Ziel das "nul"-Device angegeben).Die Schreibweise "
2>&1
" ist dann sinnvoll (bzw sogar nötig), wenn alle Ausgaben in eine Datei umgeleitet werden sollen - ">Datei.txt 2>Datei.txt
" funktioniert nicht, weil das System dazu die "Datei.txt" gleichzeitig zweimal zum Schreiben öffnen müsste ...Grüße
bastla