anding
Goto Top

ServicePack über Kix auslesen und in Datei umleiten

Hallo!

Ich würde gern die PCs ausfindig machen, die noch kein SP2 installiert haben...
Am besten übers vorhandene Kix LogIn-Skript

Es soll, für den Fall dass nur das SP1 installiert ist, den Computernamen in eine (txt)Datei schreiben. Am besten immer nur in eine Datei (bei Batchdateien wars ja ">>", wie es bei Kix ist, ???)

Hat jemand eine Lösung?

Thx im voraus....

Content-Key: 45792

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

Printed on: April 25, 2024 at 14:04 o'clock

Member: Karo
Karo Dec 01, 2006 at 13:00:27 (UTC)
Goto Top
Moin,

Du musst dass mir READVALUE arbeiten und dann einfach eine IF Abfrage laufen lassen.
Der Key heisst
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CSDVersion

$strTEMP = ReadValue ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\", "CSDVersion")
If @16034 = 0
? "Servicepack: $strTEMP @wksta"
if not $strTEMP="Service Pack 2"
IF Open( 9 , "C:\TEMP\log.TXT" , 5 ) = 0
$x = WriteLine( 9 , "@WKSTA $strTEMP" + Chr(13) + Chr(10) )
endif
Close(9)
endif
endif

Zwei Probleme könntest Du bekommen, nämlich:
1) Wenn zwei Clients gleichzeitig auf das Logfile zugreifen
2) Ein Client mehrmals einloggt. Dann erscheit er doppelt im Log

Darum würde ich statt einem Log für jeden Client einzeln schreiben, also statt
"C:\TEMP\LOG.TXT"
"C:\TEMP\" + @wksta + ".TXT" nehmen
Zudem muss natürlich C:\TEMP auf ein Netzlaufwerk (UNC oder Fest) verweisen, auf das geschreiben werden darf


Karo
Member: anding
anding Dec 01, 2006 at 14:19:03 (UTC)
Goto Top
Erst mal: VIELEN DANK!!

Aber wenn jede Client sein eigenes Log schreibt, dann muss ich über 200 Files öffnen... face-sad
Muss das sowieso eine Woche oder so laufen lassen, damit ich auch alle erwische...

Entweder ich nehm die Redundanz in EINEM Logfile hin, oder ich schau mir alle an... Hhhhm...
Member: superboh
superboh Dec 02, 2006 at 10:36:10 (UTC)
Goto Top
Hi,

bei mir wird im Loginscript jedesmal beim Anmelden pro Rechner ein Eintrag im Logfile erzeugt (Rechnername, Datum, RAM, CPU, OS, ServicePack, Festplattengrösse, davon frei, ...).
Damit ich dann nicht alle Logs einzeln durchsehen muss, habe ich mit ein Script geschrieben, das jeweils die letzte Zeile jedes Logfiles ausliet und in ein gemeinsames Logfile schreibt.
So habe ich stehts den Überblick über den aktuellen Stand der Rechner.

Gruß,
Thomas
Member: anding
anding Dec 04, 2006 at 07:03:27 (UTC)
Goto Top
...habe ich mit ein Script geschrieben...

Hast du das vielleicht noch...?! *räusper* *zwinker* face-big-smile
Member: Karo
Karo Dec 04, 2006 at 13:02:10 (UTC)
Goto Top
ööööhm, Du hast geschrieben, dass Du die Clients erwischen willst, die KEIN SP2 haben. Mit diesem Script schreiben auch nur diejenigen ein Log, die das betrifft. Wozu dann also noch in das Logfile schauen? face-wink

Karo
Member: anding
anding Dec 04, 2006 at 13:58:43 (UTC)
Goto Top
öööhm, Du hast geschrieben, dass Du die Clients erwischen willst, die KEIN SP2 haben. Mit
diesem Script schreiben auch nur diejenigen ein Log, die das betrifft. Wozu dann also noch in
das Logfile schauen?

*hirnbatsch* Oh mann, ist ja eigentlich eh klar... Sorry, da hab ich wohl was verplant... *g*
Sorry, und vielen Dank für deine Hilfe, werd dass dann mal testen und kurze Resonanz geben, wenn gewünscht?!
Member: superboh
superboh Dec 04, 2006 at 18:36:57 (UTC)
Goto Top
> ...habe ich mit ein Script
geschrieben...

Hast du das vielleicht noch...?!
*räusper* *zwinker* face-big-smile

Klar hab ich das noch face-smile

;----------------------------------------
$path="\\Server1\Logs$\Logon\"  
$tz=";"  
$tempfile="%temp%\logfiles.txt"  
;----------------------------------------

$jahr=@year
If Len(@MONTHNO)=1 $monat="0"+@MONTHNO Else $monat=@MONTHNO EndIf  
If Len(@MDAYNO)=1 $tag="0"+@MDAYNO Else $tag=@MDAYNO EndIf  

$pcfile=$path+"PCs_"+$jahr+$monat+$tag+".csv"  
If Exist ($pcfile) Del ($pcfile) EndIf

Shell "%COMSPEC% /c DIR "+$path+"PCs /b > "+$tempfile  

$handle1=FreeFileHandle()
$rc=Open($handle1,$pcfile,5)
$rc=WriteLine($handle1,"Rechner;User;Berechtigung;Datum;Uhrzeit;Prozessor;Taktfreq.;RAM;Betriebssystem;ServicePack;IP-Adresse;MAC-Adresse;Floppy aktiv;CDRom aktiv;Sitzungsart;HD-Größe;frei(MB);FileSystem;Auflösung"+@CRLF)  

$handle2=FreeFileHandle()
$rc=Open($handle2,$tempfile,2)
$zeile=ReadLine($handle2)
While @ERROR=0
  $handle3=FreeFileHandle()
  $rc=Open($handle3,$path+"PCs\"+$zeile,2)  
  $line=ReadLine($handle3)
  While @ERROR=0
    $lastline=$line
    $line=ReadLine($handle3)
  Loop
  
  $rc=WriteLine($handle1,SubStr ($zeile,1,Len($zeile)-4)+";"+$lastline+@CRLF)  
  $rc=Close($handle3)
  $zeile=ReadLine($handle2)
Loop
$rc=Close($handle2)
$rc=Close($handle1)
Del ($tempfile)  

$rc=MessageBox("Habe Fertig!",@ScriptName,64)  
Run("Explorer $path")  

Gruß,
Thomas
Member: anding
anding Dec 05, 2006 at 07:25:17 (UTC)
Goto Top
@Karo

Eine Frage hab ich noch... Wie verhält sich das Skript bei TS-Clients? Bei denen läuft unser Login-Skript nach erfolgter Anmeldung am Terminalserver...
Die haben ja kein Windows XP sondern Praktisch Windows 2003 Server...
Wir für die auf eine Datei erzeugt? (ca. 70 Clients...)

Danke schon mal! face-smile
Member: Karo
Karo Dec 05, 2006 at 15:33:00 (UTC)
Goto Top
Hi,

frag doch einfach nach dem momentanen Workstationnamen ab. Wenn der übereinstimmt, dann überspringe das erstellen des Logs damit der TS nicht berücksichtigt wird. Bedeutet:

Als allererste Zeile
If NOT @wksta="TSSERVERNAME"
dann das Script wie gehabt
If @16034 = 0
.....
.....
und zu guter letzt ein zusätzliches
endif
da ja eine neue Schleife gebaut wurde.

Karo

PS: Alle 70 würden in eine Datei schreiben und das wäre wieder das evtl. Prob mit gleichzeitigem Zugriff.