Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Domäne PCs durchsuchen und eine Datei ersetzen

Frage Entwicklung Batch & Shell

Mitglied: xxsadmin

xxsadmin (Level 1) - Jetzt verbinden

25.03.2010, aktualisiert 18.10.2012, 5722 Aufrufe, 23 Kommentare

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.

Mit freundlichen Grüßen
xxs
Mitglied: 60730
25.03.2010, aktualisiert 18.10.2012
Servus,

schau u.a mal in meinen Beiträgen / Anleitungen da findest du Softwareverteilung per psexec.

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ß
Bitte warten ..
Mitglied: xxsadmin
25.03.2010 um 15:18 Uhr
Ok. Vielen dank.

Werde mich durcharbeiten und melde mich dann wieder.
Bitte warten ..
Mitglied: 60730
25.03.2010 um 15:37 Uhr
Zitat von xxsadmin:
Ok. Vielen dank.

Werde mich durcharbeiten und melde mich dann wieder.

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.
Bitte warten ..
Mitglied: xxsadmin
25.03.2010 um 21:50 Uhr
Hallo Timo,

ich habe in ersten Anschnitt ein Fehler und kommen nicht drauf wo. So sieht die Ausgabe aus:


D:\>(
if 9 LEQ 999 SET Ws=sccm
if 9 LEQ 99 SET Ws=sccm0
if 9 LEQ 9 SET Ws=sccm00

ping -n 1 -w 5 9 | find "TTL=" && psexec \\9 -u home\administrator -p 111111
-c "\\dc01\installation\meine.cmd"
)


FOR /L %%i IN (1,1,9) DO (
if %%i LEQ 999 SET Ws=sccm
if %%i LEQ 99 SET Ws=sccm0
if %%i LEQ 9 SET Ws=sccm00
@title %Ws%%%i
ping -n 1 -w 5 %Ws%%%i|find "TTL=" && psexec \\%Ws%%%i -u home\administrator -p 111111 -c "\\dc01\installation\meine.cmd"
)
pause
Bitte warten ..
Mitglied: Edi.Pfisterer
26.03.2010 um 21:11 Uhr
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 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
Bitte warten ..
Mitglied: bastla
26.03.2010 um 21:32 Uhr
... und wenn's tatsächlich nur um das Austauschen einer Datei geht, hat der BS-Hersteller sogar mitgedacht:
replace /?
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
Bitte warten ..
Mitglied: Edi.Pfisterer
27.03.2010 um 10:41 Uhr
@ bastla:
Man lernt nie aus
DANKE
Bitte warten ..
Mitglied: Edi.Pfisterer
27.03.2010 um 11:21 Uhr
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...

01.
md c:\temp1 
02.
replace \\server1\share\lizenz.txt c:\programme\CAD /S >>c:\temp1\echo.txt 
03.
replace \\server1\share\lizenz.txt c:\programs\CAD /S >>c:\temp1\echo.txt 
04.
find /c /i "1" c:\temp1\echo.txt 
05.
if errorlevel 1 goto Ente 
06.
echo %computername% >>\\server1\share\CAD_log.txt 
07.
Goto Ente 
08.
:Ente 
09.
del c:\temp1\echo.txt 
10.
rd c:\temp1
alternativ dazu (und vermutlich aussagekräftiger):
01.
md c:\temp1 
02.
replace \\server1\share\lizenz.txt c:\programme\CAD /S >>c:\temp1\echo.txt 
03.
replace \\server1\share\lizenz.txt c:\programs\CAD /S >>c:\temp1\echo.txt 
04.
set cont= 
05.
for /F "delims=" %%f in (c:\temp1\echo.txt) do ( 
06.
	set "cont=%%f am Client %computername%" 
07.
08.
echo %cont% >>\\server1\share\log.txt 
09.
del c:\temp1\echo.txt 
10.
rd c:\temp1
alles ungetestet!

lg und erholsames WE

Edi
Bitte warten ..
Mitglied: bastla
27.03.2010 um 14:23 Uhr
@urobe73
Um die Gesamtzahl aller Ersetzungen zu ermitteln, brauchst Du eigentlich keine Temp-Datei:
01.
@echo off & setlocal 
02.
set /a count=0 
03.
for %%i in (c:\programme\CAD c:\programs\CAD c:\CAD) do ( 
04.
    for /f %%a in ('replace \\server1\share\lizenz.txt %%i /S /U 2^>nul') do set /a count+=%%a 
05.
06.
if %count% gtr 0 >>\\server1\share\log.txt echo %computername%;%date%;%count%
Der Parameter "/U" bei "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
Bitte warten ..
Mitglied: Edi.Pfisterer
27.03.2010 um 15:53 Uhr
@bastla:
ich wiederhole mich gerne:
Du hast meinen Tag mal wieder bereichert
lg
Edi
Bitte warten ..
Mitglied: bastla
27.03.2010 um 16:10 Uhr
Hallo Edi!

Danke für die Blümchen - und schöne Ferien!
bastla
Bitte warten ..
Mitglied: xxsadmin
27.03.2010 um 17:54 Uhr
Danke erstmals für eure Hilfe.
Obwohl ich ein andere Weg gehen wollte, habe ich mich letztendlich endschieden die Datei mit unsere Verteilungssoft zu ersetzen.
Warum den nicht gleich so? Die blöde Soft erkennt erstmals nicht alle Pc’s (Agent fehlt = PC wird nicht berücksichtig) und wenn das CAD Programm nicht damit verteilt wurde, wird der PC in einer Abfrage nicht miteinbezogen. Wir werden in der nächste Zeit sowieso auf SCCM umsteigen.

So möchte ich es angehen:

@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 :ende
:ersetzen
FOR /F "tokens=3 SKIP=4" %%i IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\ISD Software und Systeme\HiCAD\3" /v HomeDir') DO replace "\\ccm01\dsm_netinstall\hicad\filedat_akt\filegrup.dat" "%%i\exe"
:ende

Mein Problem "replace" gibt mir den errorlevel 0 aus, egal ob eine Datei ersetzt wurde oder nicht (keine Datei zum ersetzen --> errorlevel0 --> Meldung 0 Dateie wurde ersetz). Ich würde gerne aber in meiner Logdatei eintragen, wenn keine Datei ersetzt wurde. Wie könnte ich so was bewältigen?
Bitte warten ..
Mitglied: bastla
27.03.2010 um 18:05 Uhr
Hallo xxsadmin!
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 ...
Bitte warten ..
Mitglied: xxsadmin
27.03.2010 um 21:36 Uhr
Hallo bastla,

danke erst mal für deine schnelle Hilfe.

Zitat von bastla:
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 ...

Das mit dem "count" habe ich jetzt mit eingebaut. Brauch ich jetzt nicht unbedingt, aber trotzdem gut zu wissen.
Ich möchte aber das in meiner zweite Liste ( gleiche Liste wie oben in Skript: @echo HICAD nicht installiert %COMPUTERNAME% %DATE% %TIME% >> \\ccm01\dsm_netinstall\hicad\filedat_akt\fehler.log), alle PC's haben wo die Datei nicht getauscht wurde (z.B. weil nicht vorhanden)
z.B. @echo Datei wurde nicht ersetzt %COMPUTERNAME% %DATE% %TIME% >> \\ccm01\dsm_netinstall\hicad\filedat_akt\fehler.log.

01.
@echo off & setlocal 
02.
set /a count=0 
03.
REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\ISD Software und Systeme" >NUL 2>&1 && goto :ersetzen 
04.
echo HICAD nicht installiert %COMPUTERNAME% %DATE% %TIME% >>\\ccm01\dsm_netinstall\hicad\filedat_akt\fehler.log 
05.
GOTO :eof 
06.
:ersetzen 
07.
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 ) 
08.
if %count% gtr 0 >>\\ccm01\dsm_netinstall\hicad\filedat_akt\passt.log echo %computername%;%date%;%count%
Ü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).

Danke. Bin gerade in der Lernphase und solche Bemerkungen sind herzlichst willkommen. Wenn du mehrere solche Fehler siehst, gib mir bitte Bescheid .
Bitte warten ..
Mitglied: bastla
27.03.2010 um 22:06 Uhr
Hallo xxsadmin!

Versuch es damit (weiterhin ungetestet ):
01.
@echo off & setlocal 
02.
REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\ISD Software und Systeme" >NUL 2>&1 && goto :ersetzen 
03.
echo HICAD nicht installiert %COMPUTERNAME% %DATE% %TIME% >>\\ccm01\dsm_netinstall\hicad\filedat_akt\fehler.log 
04.
GOTO :eof 
05.
 
06.
:ersetzen 
07.
set /a count=0 
08.
FOR /F "tokens=3 SKIP=4" %%i IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\ISD Software und Systeme\HiCAD\3" /v HomeDir') DO ( 
09.
    for /f %%a in ('replace "\\ccm01\dsm_netinstall\hicad\filedat_akt\filegrup.dat" "%%i\exe" /S /U 2^>nul') do set /a count=%%a 
10.
11.
if %count% gtr 0 ( 
12.
    >>\\ccm01\dsm_netinstall\hicad\filedat_akt\passt.log echo %computername%;%date%;%count% 
13.
) else ( 
14.
    >>\\ccm01\dsm_netinstall\hicad\filedat_akt\fehler.log echo Datei wurde nicht ersetzt: %COMPUTERNAME% %DATE% %TIME% 
15.
)
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
Bitte warten ..
Mitglied: xxsadmin
28.03.2010 um 09:27 Uhr
vielen dank, euch allen für eure Zeit und Gedult.

@bastla

vielleicht kannst du mir noch sagen was "2^>nul" bewirken soll?

Vielen dank
Gruß
xxs
Bitte warten ..
Mitglied: bastla
28.03.2010 um 09:58 Uhr
Hallo xxsadmin!

Mit "2^>nul" werden allfällige Fehlermeldungen (auf Kanal 2 = "STDERR") ins "Nichts" umgeleitet (= unterdrückt) - für die Auswertung des Ergebnisses werden sie hier ohnehin nicht benötigt ...

Grüße
bastla
Bitte warten ..
Mitglied: xxsadmin
28.03.2010 um 10:22 Uhr
Hallo bastlaa,

also gleich wie "2>&1". Oder täusche ich mich?
Bitte warten ..
Mitglied: bastla
28.03.2010 um 12:44 Uhr
Hallo xxsadmin!
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
Bitte warten ..
Mitglied: xxsadmin
28.03.2010 um 19:46 Uhr
Alles klar. Und noch mal vielen, vielen dank für deine Unterstützung.

Gruß
xxs
Bitte warten ..
Mitglied: bastla
28.03.2010 um 19:50 Uhr
Hallo xxsadmin!

Gerne - aber ich war ja hier nicht der einzige ...

Grüße
bastla
Bitte warten ..
Mitglied: xxsadmin
29.03.2010 um 22:14 Uhr
Zitat von bastla:
Hallo xxsadmin!

Gerne - aber ich war ja hier nicht der einzige ...

Grüße
bastla

beim den anderen habe ich mich fünf steps nach oben bereits bedankt

==> vielen dank, euch allen für eure Zeit und Gedult.

Heute hat übrigens alles prima geklappt. Datei getauscht und alle Systeme noch funktionsfähig.

Gruß
xxs
Bitte warten ..
Mitglied: bastla
29.03.2010 um 22:26 Uhr
Hallo xxsadmin!

beim den anderen habe ich mich fünf steps nach oben bereits bedankt
Sorry, war mir nicht aufgefallen; jedenfalls schön, dass Du sie doch nicht vergessen hast ...

... und freut mich, wenn Du Erfolg hattest ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...