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

Batch-Datei zum überprüfen ob eine Software installiert installiert wurde

Frage Entwicklung Batch & Shell

Mitglied: moringle

moringle (Level 1) - Jetzt verbinden

12.11.2009 um 15:15 Uhr, 9238 Aufrufe, 8 Kommentare

Hallo Admins
Ich habe folgendes Pfoblem / Frage:

In unserem Firmennetz wurden diverse Programme per Gruppenrichtlinie verteilt.
Das Netzwerk besteht aus ca. 300 Win XP Prof Rechnern, die über eine Domäne miteinander kommunizieren.

Leider ging bei der Verteilung etwas schief.
Die Programme wurden nur zu ca. 85% verteilt.
Ein Netzwerkproblem wurde schon ausgeschlossen.

Was ich jetzt machen will ist im Prinzip schnell gesagt:

Ich möchte eine Batch-Datei schreiben die erst prüft welche Pcs online sind und welche offline.
Die Ergebnisse möchte ich dann in 2 *.txt-Dateien schreiben (online.txt und offline.txt).
Wichtig ist mir hierbei, dass es über den Computernamen klappt, da dießer fortlaufend ist (z.B. ABC001, ABC002,.......ABC300)
Als nächstes soll die Batch-Datei alle online PCs überprüfen ob z.B. VLC-Player installiert wurde und die Ergebnisse dann wieder mit entsprechendem
Computernamen in 2 *.txt-Dateien schreiben (installiert.txt und nicht_installiert.txt).

Step1 würde ich mit einem ping /n 1 Befehl reallisieren und über die Error-Levels meine online/offline PCs erhalten.
Step2 würde ich mit einem If exist / if not exist und dann dem jeweiligem Pfad reallisieren. z.B. if exist \\Client\c$\Programme\VideoLAN\VLC

wäre nett, wenn mir einer von euch sagen kann ob das so möglich ist und ggf. ein wenig unter die Arme greift.
Bin echt am verzweifeln ich bekomms einfach ned hin.

Danke schonmal im Vorraus, ich hoffe ich kann noch ein paar hilfreiche Tipps von euch erhalten.
Mitglied: Logan000
12.11.2009 um 15:45 Uhr
Moin Moin

Ich bin die sicher keine Hilfe in Batch.
Aber wenn ihr mit Softwareverteilung arbeitet habt ihr das Problem ja evtl. häufiger. Wäre es da nicht sinnvoll sich über eine Inventartisierung Gedanken zu machen?
Wie z.B. LogInventory oder Spiceworks.

Step2 würde ich mit einem If exist / if not exist und dann dem jeweiligem Pfad reallisieren. z.B. if exist \\Client\c$\Programme\VideoLAN\VLC
ich würde nicht nur den Pfad prüfen, sondern auch in der Registry unter
HKEY_LOCAL_MACHINE\SOFTWARE\ bzw.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\... schauen ob sich deine Installation, da was hinterlassen hat.

Gruß L.
Bitte warten ..
Mitglied: bastla
12.11.2009 um 16:19 Uhr
Hallo moringl und willkommen im Forum!

Der Batch für das Abklappern der Rechner "ABC001" bis "ABC300" könnte (ungetestet) etwa so aussehen:
01.
@echo off & setlocal 
02.
set "Online=D:\Online.txt" 
03.
set "Offline=D:\Offline.txt" 
04.
 
05.
if exist "%Online%" del "%Online%" 
06.
if exist "%Offline%" del "%Offline%" 
07.
for /L %%i in (1,1,9) do ping ABC00%%i -n 1 >nul && >>"%Online%" echo ABC00%%i || >>%Offline% echo ABC00%i 
08.
for /L %%i in (10,1,99) do ping ABC0%%i -n 1 >nul && >>"%Online%" echo ABC0%%i || >>%Offline% echo ABC0%i 
09.
for /L %%i in (100,1,300) do ping ABC%%i -n 1 >nul && >>"%Online%" echo ABC%%i || >>%Offline% echo ABC%i
Um dann alle (zumindest vorhin ) erreichbaren Rechner zu überprüfen:
01.
@echo off & setlocal 
02.
set "Online=D:\Online.txt" 
03.
set "Ja=D:\Installiert.txt" 
04.
set "Nein=D:\Nicht_installiert.txt" 
05.
 
06.
for /f "usebackq delims=" %%i in ("%Online%") do if exist "\\%%i\c$\Programme\VideoLAN\VLC\vlc.exe" (>>"%Ja%" echo %%i) else (>>"%Nein%" echo %%i)
Grundsätzlich stimme ich Logan000 hinsichtlich der Überprüfung des Reg-Eintrages zwar zu, aber wenn die Programmdatei fehlt, besteht auf jeden Fall Handlungsbedarf - insofern sollte das "if exist [UNC-Pfad zur Programmdatei]" genügen ...

Grüße
bastla
Bitte warten ..
Mitglied: -ricardo-
12.11.2009 um 17:18 Uhr
Anderer Lösungsansatz wäre das zuweisen eine Scripte per GPO, was beim start ausgeführt wird ...
Der Rechener führt das Script aus (in dem ebenfalls die UNC-Pfade angegeben sind) und guckt ob die Dateien da sind.

Wenn etwas fehlt, wird eine Vraiable "s_all" auf "false" gesetzt und er schreibt die Namen der Fehlernden Software in eine Datei "Rechnername.csv" (... momentan erfolgt die Ablage Local auf "C:\", kannst dann ja gegen "\\servername\freigabeordner$\ "ersetzten )

Wenn nichts fehlen sollte geht er hin und guckt ob noch eine alte datei mit seinem Rechnernamen da ist und löscht diese

Somit hättest du dann einen Ordner auf dem Server wo du sehen kann welcher Rechner noch nicht vollständig sind ( anhand der Dateinamens) und wenn du die datei öffnest kannst du sehen welche softwar es ist ...

Ist zwar nicht optimal aber geht

01.
'***************** Dim Vars  
02.
Dim soll_software(100) 'Falls 100 zu wenig ist erweitern :)  
03.
Dim s_all  
04.
Dim strHost 
05.
Dim objWMIService 
06.
Dim colItems 
07.
Dim strHostname 
08.
Dim s_false 
09.
Dim strSoftware 
10.
 
11.
 
12.
' Soll Software 
13.
' Als String 	    Softwarename ; Pfad 
14.
soll_software(0) = "VLC;C:\Programme\VLC\vlc.exe" 
15.
soll_software(1) = "CDBurnXP;C:\Programme\CDBurnerXP\cdbxpp.exe" 
16.
 
17.
 
18.
 
19.
' wird sobald eins fehlt auf false gesetzt ******* 
20.
s_all = true  
21.
 
22.
 
23.
'zum sammeln der fehlernden software  
24.
s_false = "" 
25.
 
26.
 
27.
'Hostname auslesen 
28.
strHost = "." 
29.
Set objWMIService = GetObject("winmgmts:\\" & strHost & "\root\CIMV2") 
30.
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) 
31.
For Each objItem In colItems 
32.
   strHostname = objItem.Name 
33.
Next 
34.
 
35.
 
36.
Set fso = CreateObject("Scripting.FileSystemObject") 
37.
 
38.
'Überprüfung  
39.
For Each software In soll_software 
40.
    
41.
	If software <> "" Then   
42.
		'********************* String zerlegen  
43.
		strSoftware = Split(software,";") 
44.
		If (fso.FileExists(strSoftware(1))) Then 
45.
		Else 
46.
		s_all = flase 
47.
		s_false= s_false & strSoftware(0) & ";" 
48.
	End If 
49.
End If 
50.
 
51.
Next 
52.
 
53.
 
54.
 
55.
' Wenn irgendws gefehlt hat wird die eine Datei mit den fehlenden Programmen angelegt  
56.
If s_all = flase Then  
57.
	Set strOutDatei = FSO.CreateTextFile("C:\" & strHostname & ".csv") 
58.
	 
59.
	s_false = Split(s_false,";") 
60.
	 
61.
	For Each line in s_false  
62.
   		strOutDatei.writeline line 
63.
	Next 
64.
 
65.
Else  
66.
 
67.
	'Wenn nichts fehlt und noch eine alte Meldedatei abgelegt ist ... wir diese gelöscht 
68.
	If (fso.FileExists("C:\" & strHostname & ".csv")) Then 
69.
		Set file = fso.GetFile("C:\" & strHostname & ".csv") 
70.
		file.Delete 
71.
	End IF  
72.
End If  
73.
 
Die Rechtschreibfehler gibt es um sonst dazu.... ist auch nur auf die schnelle und könnte besser gemacht werden
Bitte warten ..
Mitglied: 60730
12.11.2009 um 17:51 Uhr
Servus,

Logans Idee ist gut, Bastlas Ansatz - wie immer rischdisch - (und nu komm ich...)

Ich würde das per Psexec realisieren, und VLC starten, via Tasklist nachsehen, ob VLC läuft und das protokollieren.

Mehr oder weniger kann es beim VLC z.b schon bei der Verteilung daran scheitern, dass eine alte Vorgängerversion drauf war.

daher prüfe ich vorm installieren, ob VLC da ist - wenn ja deinstallier ich den und installiere Ihn dann in der neuen Version.

Gruß
Bitte warten ..
Mitglied: DerWoWusste
12.11.2009 um 19:54 Uhr
N'Abend.
Noch ein Gedanke: Eigentlich ist eine gut geplante MSI-Verteilung nahezu sorgenfrei. Schau mal nach, woran es scheitert. Im Eventlog steht das drin unter System - Application management.
Bitte warten ..
Mitglied: 60730
12.11.2009 um 21:02 Uhr
Nabend zurück,

aber beim VLC "lohnt" es sich nicht wirklich "jedesmal" auf ein neues ein msi zu schnüren.

Oder war vlc nur ein Beispiel?

Gruß
Bitte warten ..
Mitglied: bastla
12.11.2009 um 21:10 Uhr
@-ricardo-
Da Timo Dich in seiner Aufzählung ausgelassen hatte: Wenn es nicht "gleich und auf der Stelle" sein soll, ist Dein Ansatz sicher sinnvoll und einfacher (da das Handling der Listen - besonders "Online"/"Offline" - entfällt) ...
Ich weiß, dass Dein Vorschlag nur eine Skizze ist, aber trotzdem eine kurze technische Anmerkung: Anstelle des Zusammensetzens und später wieder Zerlegens von "s_false" anhand der Semikolons könntest Du gleich in Zeile 47 "vbCrLf" als Trennzeichen einbauen und dann später den gesamten String ohne Schleife in die Datei schreiben ...

Grüße
bastla
Bitte warten ..
Mitglied: moringle
13.11.2009 um 00:33 Uhr
Hallo Ihr lieben,

zunächst will ich mich für eure Antworten bedanken.
Hab schon gedacht ich bekomm erst in einem Jahr oder so ne Antwort, wo dann womöglich noch
sowas drinsteht wie "Benutze die Suchfunktion" oder "geh auf www.gidf.de"
Bin deshalb sehr froh, dass es im WWW noch hilfsbereite Menschen gibt.
Danke hierfür.

Ich werde mich am Wochenende mal hinsetzen und eure Tipps "verarbeiten".
Ihr werdet spätestens am So Abend von mir hören, obs geklappt hat oder ob weitere Komplikationen
aufgetreten sind.

Bis dahin alles Gute.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Ä in batch Datei (12)

Frage von BergEnte zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...