103148
Goto Top

Per Batch Client auslesen

Hallo,

ich möchte gerne paar Infos von unseren Clients auslesen.

Dazu würde ich folgenden Befehl im Anmelde Script nutzen:

1. ver >> \\server\client\%computername%.txt
2. wmic bios get serialnumber >> >> \\server\client\%computername%.txt


Frage, wie bekomme ich die Augabe in eine Zeile für die TXT Datei, oder kann man die Daten auch in eine Excel Datei schreiben und jede Ausgabe in ein Feld?
Ideal wäre vorab den %computername% + %username% dann die Windows Version und dann die Service Tag, die Liste muss ich dann mit Dell abgleichen bezüglich Garantie Zeit.

Zur Zeit bekomme ich folgende Ausgabe:

Microsoft Windows [Version 6.1.7601]
S e r i a l N u m b e r XYZABCD

Die PC sind von Dell ab Windows XP in einer 2008 Server Umgebung im AD.

XP gibt den Wert ser SerialNumber nicht zurück.

Content-Key: 232489

Url: https://administrator.de/contentid/232489

Printed on: April 19, 2024 at 09:04 o'clock

Member: colinardo
colinardo Mar 13, 2014 updated at 11:59:30 (UTC)
Goto Top
Hallo angebissener-apfel,
könntest du so mit Batch machen:
@echo off & setlocal

REM Serial auslesen
for /f "tokens=2 delims==" %%a in ('wmic bios get SerialNumber /format:list ^| findstr /i "SerialNumber"') DO set serial=%%a  

REM Version auslesen
for /f "delims=" %%a in ('ver') do set version=%%a  

echo %computername%;%username%;%version%;%serial% >"\\server\client\%computername%.txt"  
oder via VBS so
Dim strComputername, strVersion, strSerial, strUsername
Set fso = CreateObject("Scripting.Filesystemobject")  
Set objShell = CreateObject("Wscript.Shell")  
strComputername = objShell.ExpandEnvironmentStrings("%computername%")  
strUsername = objShell.ExpandEnvironmentStrings("%username%")  
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")  

Set colSettings = objWMIService.ExecQuery ("Select * from Win32_Bios")  
For Each objBIOS In colSettings 
   strSerial = objBIOS.SerialNumber
Next

Set colSettings = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")  
For Each objOS In colSettings 
   strVersion = objOS.Caption & " " & objOS.Version  
Next
info = strComputername & ";" & strUsername & ";" & strVersion & ";" & strSerial  
fso.OpenTextFile("\\server\client\" & strComputername & ".txt",2,True).WriteLine(info)  
Alles in ein Excel-File schreiben ginge auch, das setzt aber auf den Clients jeweils voraus das dort Excel installiert ist und du hättest dann Zugriffs-Probleme wenn gleichzeitige Logins stattfinden.

XP gibt den Wert ser SerialNumber nicht zurück.
kann ich hier nicht bestätigen, hier geht das Auslesen der Seriennummer mit WMI auch auf einem XP SP3

Alternativ lassen sich die Informationen auch mit einem Inventory-Script Remote für ein ganzes Netzwerk abfragen und direkt in einem Excel-File zusammenfassen:

Grüße Uwe
Mitglied: 103148
103148 Mar 17, 2014 at 10:42:57 (UTC)
Goto Top
hi...

das mit der Batch sieht gut aus.... teste weiter.

Wenn ich dazu eine Abfrage machen möchte die da heißt:

if %computername% = "PC*" then call datei \\server\temp\x.bat

die PC sind nummeriret von PC001 bis PC800 es soll aber nur abgefragt werden ist es ein PC die Nummer wäre egal, wie geht das?

Somit kann ich server ausschliessen zb. das die Datei aufgerufen wird am SERVER01 oder SERVER07

Gruß
Member: colinardo
colinardo Mar 17, 2014 updated at 10:46:38 (UTC)
Goto Top
Zitat von @103148:
die PC sind nummeriret von PC001 bis PC800 es soll aber nur abgefragt werden ist es ein PC die Nummer wäre egal, wie geht
das?
if "%computername:~0,2%" == "PC" call \\server\temp\x.bat
Grüße Uwe
Mitglied: 103148
103148 Mar 17, 2014 at 12:19:59 (UTC)
Goto Top
cool, bedeutet das ~0,2, das er nur die ersten zwei stellen abfragt?
Member: colinardo
colinardo Mar 17, 2014 updated at 12:29:50 (UTC)
Goto Top
Zitat von @103148:
cool, bedeutet das ~0,2, das er nur die ersten zwei stellen abfragt?
ja, => DOS String Manipulation

Grüße Uwe
Mitglied: 103148
103148 Mar 17, 2014 updated at 12:39:20 (UTC)
Goto Top
okay, somit kann ich alle andere nicht Clients ausschliessen....

ich hätte noch eine Liste ( clients.txt ) die nicht abgefragt werden dürfen, kann du das mit einbinden?

in der Liste steht....

PC007
PC200
PC241

usw

wäre sehr dankbar...

sehr cooler Link....

Gruß
Member: colinardo
colinardo Mar 17, 2014 updated at 12:52:17 (UTC)
Goto Top
eine Frage: Warum machst du das nicht mit einer GPO die du auf eine Gruppe von Computern verlinkst?? dann brauchst du die ganzen Abfragen nicht.
Mitglied: 103148
103148 Mar 17, 2014 at 13:04:11 (UTC)
Goto Top
berechtigt, die Frage...

ich benötige zur Zeit zwei Abfragen, einmal welcher user sitzt nach Anmeldung an welchen PC und welche BS Version läuft dort.

Die OU Struktur wird neu aufgesetzt und ist einen kleine Baustell, die Daten brauche ich diese Woche.
Ausserdem ziehen die GPO nicht überall... warum weiß ich nicht, die wollte ich mit einem gpupdate /force im Anmeldescript mitgeben, aber halt nicht am TS Server.
Dann muss ich um 21:00 Uhr alle Rechner runter fahren die noch an sind... ausser die clients.txt, die müssen anbleiben....
Member: colinardo
colinardo Mar 17, 2014 updated at 13:20:44 (UTC)
Goto Top
OK ziemliches Durcheinander face-wink, das Überspringen der Clients in deiner Liste kannst du so machen:
findstr /i "%COMPUTERNAME%" "\\Server\clients.txt" && exit  
wenn der Rechnername in der Liste gefunden wird, wird das Script beendet.

Grüße Uwe
Mitglied: 103148
103148 Mar 17, 2014 at 13:30:10 (UTC)
Goto Top
super, vielen Dank...

ähm, einen hab ich noch... ;>)

ich muss prüfen welche PC´s noch ab 22:00 Uhr an sind, evtl per ping.... über pc001 bis pc600... ne Idee
Member: colinardo
colinardo Mar 17, 2014 at 13:32:05 (UTC)
Goto Top
Zitat von @103148:
ich muss prüfen welche PC´s noch ab 22:00 Uhr an sind, evtl per ping.... über pc001 bis pc600... ne Idee
Suchfunktion hier im Forum, gibt's haufenweise Einträge....
Mitglied: 103148
103148 Mar 17, 2014 at 14:23:18 (UTC)
Goto Top
okay, wie ich pürfe weiß ich , kenne aber nicht die Funktion damit von PC001 bis PC600 geprüft wird...

ping PC001 -n 1 | findstr "TTL" && goto rechner_on.txt
.
.
.
.
ping PC600 -n 1 | findstr "TTL" && goto rechner_on.txt
Member: colinardo
colinardo Mar 17, 2014 updated at 14:44:44 (UTC)
Goto Top
OK dann ist aber deine Suchmaschine kaputt, z.B. so:
@echo off & setlocal enabledelayedexpansion
set startpc=1
set endpc=600
for /L %%i IN (%startpc%,1,%endpc%) DO @(
	if %%i LSS 10 set prefix=00
	if %%i GEQ 10 set prefix=0
	if %%i GEQ 100 set prefix=
	echo Pinge PC!prefix!%%i
	ping -n 1 -w 100 PC!prefix!%%i | find "Bytes=32" >nul && echo Host PC!prefix!%%i ist online!  
)
denke Beitrag ist hier jetzt gelöst ...
Mitglied: 103148
103148 Mar 17, 2014 at 14:44:07 (UTC)
Goto Top
vielen Dank....