couchcoach
Goto Top

Rechner Inventarisierung, Login Skript und Login Dokumentation mit Kix und Active Directory

Dieses Tutorial soll ein Beispiel für ein Domänen Anmelde- und Abmeldeskript sein, welches als nettes Abfallprodukt noch einige Rechner Informationen über die Hard- und Software erfasst.

Rechner Inventarisierung Login Skript und Dokumentation mit Kix und Active Directory.

Jeder Admin einer Domäne ist interessiert an den aktuellen Rechner Daten in seinem Netz. Aus diesem Grund habe ich vor drei bis vier Jahren mit Kix begonnen Skripte zu schreiben. Ich habe hier ein Kix Skript für die Anmeldung gebastelt, welches mir beim Login der User die Daten, der Rechner und die Infos wer sich An- bzw. Abgemeldet hat, in zwei Log-Files schreibt. Je eine für die Rechner Daten und eine für die Anmeldeinformationen.
Somit habe ich immer aktuelle Daten über die Konfiguration meiner Rechner im Netz und habe für jeden Tag eine Datei mit den An- und Abmeldungen. Ein weiterer Vorteil besteht darin das ich nun auch kontrollieren kann was alles an Software im Netz eingesetzt wird.

Was macht dieses Skript alles:

  • verbinden und trennen von Netzwerk Freigaben
  • verbinden und trennen von Netzwerk Druckern (Druckwarteschlangen auf Domänen Rechnern oder Servern)
  • erfassen aller Benutzer An- und Abmeldungen (für die Abmeldung ist ein zweites Skript mit gleichem Inhalt notwendig welches unterhalb der >>Login.kix<< steht)
  • erstellen einer Datei für Alle An- und Abmeldungen pro Tag
  • erfassen aller Rechner von denen sich angemeldet wird (nur Domänen Rechner)
  • was wird erfasst:
    • Hardware (CPU, Betriebssystem, NetBios Name, RAM, MAC Adresse, IP Adresse)
    • Software (Alle installierten Programme sowie Patche)

Wobei zu sagen bleibt, dass dies bei weitem nicht alles ist was mit Kix möglich ist.

So nun fangen wir mal an

Als erstes laden wir uns mal das aktuelle Kix Paket von http://www.kixtart.org herunter. Derzeitig ist die aktuelle Version 4.51. Nach dem entpacken der Datei benötigen wir erstmal nur die Datei "Kix32.exe" welche wir uns in einen neuen Ordner auf unserer Platte kopieren.
In diesem Ordner erstellen wir eine neue Datei welche wir "login.kix" nennen.

Diese Datei öffnen wir nun mit dem Notepad oder einem beliebigen anderen Editor, Tipp: ich würde die Endung .kix direkt dem Editor zuordnen denn beim arbeiten wird doch öfters mal getestet und dann kann man die Datei mit einem einfachen Doppelklick wieder bearbeiten.

Um unser Skript später zu testen ziehen wir per Drag and Drop unser Skript auf die kix32.exe oder direkt in der DOS Eingabeauffordung
mit "kix32.exe login.kix".

Zur Funktion:

Bereich Variablen

Hier werden die jeweiligen Servernamen gesetzt. In den meisten Fällen wird zwar alles auf einem einzigen Server durchgeführt, sollte es jedoch eine größeres LAN mit mehreren Servern sein, kann es durch aus Sinn machen die einzelnen Funktionen (File-, Druckserver, etc.) auf verschiedene Maschinen zu verteilen

Bereich Netzlaufwerke

Als erstes werden alle vorhandenen Netzlaufwerke getrennt, ganz klar erstmal reinen Tisch machen. Anschließend werden vom Fileserver die Freigaben Benutzer und / oder Gruppen bezogen gemappt. Sollte es mal einen Account "Gast" geben, was ich ja kaum glaube, dann soll dieser nur das Laufwerk "Public" gemappt bekommen. Aus diesem Grund wird direkt nach dem Mapping der Standard Block übersprungen "goto EndSharing" und an der Sprungmarke <:EndSharing> mit dem Skript fortgefahren.
Etwas spezielles ist noch die Freigabe <use z: "\\"+$Fileserver+"\"+@userid+"$">. Hier wird für jeden User ein individuell eine Freigabe, auf die nur er Zugriff hat, gemappt. Ich Verbinde mit dieser Funktion für jeden User ein persönliches Laufwerk, auf welchen er persönliche Dinge ablegen kann. Durch das $ hinter der Freigabge wird diese als nicht sichtbar deklariert und wird beim browsen in der Netzwerk Umgebung auf den Servern nicht angezeigt.

Druck Warteschlangen verbinden

Wenn ich auf dem einem Server Drucker Freigegeben habe, werden diese hier verbunden. Da alte Drucker, welche nicht mehr vorhanden sind, nicht automatisch auf den Clients gelöscht werden, kann ich die Löschung auch per Skript vornehmen. Hier wird Beispielhaft ein nicht mehr vorhandener Laser Drucker von den Clients gelöscht. Anschließend werden noch zwei weitere Drucker verbunden. Die Druckertreiber werden in der Regel automatisch vom Server auf die Clients übertragen. Wenn sich die Clients das erste mal mit dem Server verbinden dauert die Anmeldung etwas länger da die Druckertreiber komplett mit übertragen werden müssen. Bei weiteren Anmeldungen geht der Anmeldevorgang dann zügiger von statten.

Bereich Hardware

Kix stellt einige Variablen zur Verfügung, welche Informationen über das System enthalten. Diese Variablen an einem beginnenden @ Zeichen (Bsp.: @cpu) zu erkennen. Hier verweise ich auf die Dokumentation "Kix2010.doc" welche im Download enthalten ist. Die Hardware Informationen sind bis auf die IP-Adresse (@IPADRESS0) selbsterklärend. Bei @ipadressx muß das x durch einen Wert zwischen 0 und 3 ersetzt werden. Dieser gibt an welche IP-Adresse angezeigt werden soll. Ich habe mich in diesem Skript auf die erste Adresse beschränkt da es leider nur eine Möglichkeit gibt die MAC Adresse der ersten NIC anzuzeigen. Die einzelnen Blöcke der IP-Adresse werden mit führenden Leerzeichen dargestellt (z.B. 192.168. 2. 12). Wer dieses umgehen möchte, da die Daten eventuell weiterverarbeitet werden sollen, der sollte sich einmal den Befehl Split und Element anschauen. Hiermit ist es möglich die Leerzeichen zu entfernen. Ich habe diesen Code aus dem Skript rausgelassen, habe ihn jedoch am Ende der Doku angefügt. Diesen Code bei Bedarf mit der Stelle mit der Ausgabe der IP-Adresse ersetzen.

Bereich Software

Um zu erfahren welche Software installiert ist, liest das Skript die Registry Einträge aus dem Pfad "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" aus. Wie hier zum auslesen der Software, ist es auch möglich eigene Registry Einträge zu erstellen, auszulesen, zu ändern oder zu löschen. Ich hatte diese einmal genutzt um in Zeiten wo es noch keinen SUS bzw. WSUS gab erfahren ob Microsoft Patche installiert sind (Jaja die guten alten Würmer). Bitte in der Doku nach "DELKEY, DELVALUE, ENUMKEY, ENUMVALUE, KEYEXIST, READTYPE, READVALUE, WRITEVALUE" suchen.

Bereich Anmeldung und Abmeldung

Hier wird lediglich zu Beginn geschaut, ob es für den aktuellen Tag bereits eine Login Datei gibt. Wenn die Datei noch nicht existiert wird zusätzlich zu den Anmeldeinformationen ein Header geschrieben, damit die Datei übersichtlicher wird. Auch hier werden wieder System Variablen welche Kix zu Verfügung stellt angewendet um Informationen zu erhalten. In meinem Beispiel wird für jeden Tag eine neue Login Datei generiert. In kleineren Domänen könnte man sich auch auf eine Datei Pro Woche bzw. Pro Monat beschränken. Hierfür muß lediglich der Datei name angepasst werden (z.B. Anmeldungen "+" @year+"."+@MONTHNO+".TXT" für eine Datei Pro Monat).

Für die Abmeldung wird der gleiche Code verwendet wie für die Anmeldung, wobei zu beachten ist das in der Zeile <? "¦"$user"¦ "$client" ¦ "@DATE" ¦ "@TIME" ¦ "$lserver" ¦ i ¦"> das kleine i durch ein o ersetzt wird. Es ist natürlich möglich hier einen x-beliebigen Begriff für Login und Logoff einzusetzen.

Wo setze ich nun die Skripte ein und wie aktiviere ich diese?

Die drei Dateien kix32.exe, login.kix und die logoff.kix kopieren wir in die NETLOGON Freigabe in unserer Domäne. Jetzt erstellen wir noch eine Gruppenrichtlinie die für alle User greift. Am besten eine eigene OU a la "Firmen User" erstellen und alle User Konten hierher verschieben wenn noch nicht geschehen. Für diese OU eine GPO erstellen. In dieser GPO folgende Eigenschaften eintragen.

  • Benutzerkonfiguration -> Windows-Einstellungen -> Skripts (Anmeldn/Abmelden)
    • Anmelden-
        • Skriptname = "\\DeinDomänenname\SYSVOL\DeinDomänenname\scripts\kix32.exe"
        • Skriptparameter "login.kix"
    • Abmelden-
        • Skriptname = "\\DeinDomänenname\SYSVOL\DeinDomänenname\scripts\kix32.exe"
        • Skriptparameter "logoff.kix"

    So jetzt nur noch speichern der GPO und anschließen testen.
    Wenn man nur das Anmeldeskript benötigt (warum auch immer) kann man das Skript auch für jeden User in den Benutzereinstellungen auf der Reiterkarte Profil einrichten ("kix32.exe login.kix"). Zum testen kann man das Skript auch erstmal in einem DOS Fenster laufen lassen um zu prüfen ob alles einwandfrei funktioniert.

    Hier nochmal der Link zur offiziellen Kixtart Seite http://www.kixtart.org

    So das war es erstmal soweit von mir, ich denke jetzt schickts auch. Ich habe in diesem Skript nicht alles umgesetzt was möglich ist, lediglich die Dinge welche bei mir aus der Praxis heraus wichtig sind. Deshalb sollte dieses Tutorial bitte nicht als Versuch einer Komplett Dokumentation von Kix und dessen Möglichkeiten gesehen werden sondern nur als Anregung und Starthilfe für An- und Abmeldeskripte in Windows Domänen. Eine interessante Erweiterung wäre z.B. eine Erweiterung dahin, das für Lizenzpflichtige Softwarepakete ein Datei mit den aktuell installierten Lizenzen generiert wird. Naja Ihre habt bestimmt auch noch ettliche Ideen was Sinnvoll ist oder auch nicht. Ich hoffe das im Forum noch ein wenig darüber diskutiert wird damit wir alle nach kurzer Zeit mit einer optimierten Skript Lösung arbeiten können. Denn eigentlich haben wir doch alle das gleiche Ziel?

    Grüße und viel Spaß beim Skripten

    PS: Ich bitte um nachsehen für eventuelle Fehler, für unklare Beschreibungen und ich hoffe ich habe nichts wichtiges vergessen. Because pobody is nerfect!


    !!!Die Namen für die / den Server sowie die Freigaben, User- und Gruppennamen müssen natürlich an Eure Struktur angepasst werden!!!

    login.kix - Ab hier den Inhalt markieren und in die Datei login.kix kopieren.
    ; ### Das Anmeldeskript soll sichtbar ausgeführt werden und das Fenster für das Skript erhält mit SETTITLE eine Bezeichnung.
    ; ### Hier könnte stehen der Firmenname, auch Datum und Uhrzeit oder Informationen für Mitarbeiter.
    ; ### Wobei diese auch mit einer MessageBox realisiert werden können.
    ;
    SETCONSOLE("show")  
    SETCONSOLE("maximized")  
    SETTITLE("Anmeldeskript für Meine Domäne 2006")  
    ;
    ;
    ; *********************
    ; Variablen deklarieren
    ; *********************
    ;
    $FileServer="ServerNameFileServer"   
    ; ### Name des Servers auf welchem sich die Freigaben befinden
    ; ### alternativ kann auch natürlich auch eine IP-Adresse angegeben werden
    ;
    $ProtokollServer="ServerNameProtokollServer"  
    ; ### Name des Servers auf welchem die Freigabe für die Dokumentation
    ; ### der An- und Abmeldungen sowie der Rechner Infos liegt
    ;
    $PrintServer="ServerNameDruckWarteSchlangen"  
    ; ### Name des Servers auf welchem (falls vorhanden) die Drucker
    ; ### eingerichtet und freigegeben sind die verbunden werden sollen
    ;
    ; **************************************
    ; Alle vorhandenen Netzlaufwerke löschen
    ; **************************************
    use "*" /delete  
    ;
    ;
    ; ***************************************
    ; Netzlaufwerke Gruppen bezogen verbinden
    ; ***************************************
    if ingroup("grpBuchhaltung")  
    	use f: "\\"+$Fileserver+"\Buchhaltung"  
    endif
    if ingroup("grpLeitung")  
    	use l: "\\"+$FileServer+"\Leitung"  
    endif
    ; ### Für weitere Freigaben einfach einen oberen Block kopieren und anfügen
    ;
    ;
    ; ****************************************
    ; Netzlaufwerke Benutzer bezogen verbinden
    ; ****************************************
    if @userid="Administrator"  
    	use x: "\\"+$ProtokollServer+"\login$"   
    	;das ist die Freigabe wo die Login Protokolle abgelegt werden
    	;natürlich soll diese nur der Admininstrator sehen
    endif
    if @userid="Gast"  
    	use p: "\\"+$Fileserver+"\public"  
    	goto EndSharing
    endif
    ;
    ;
    ; **************************************
    ; Netzlaufwerke für jeden User verbinden
    ; **************************************
    use g: "\\"+$Fileserver+"\Gemeinsames"  
    use s: "\\"+$Fileserver+"\Schriftverkehr"  
    use v: "\\"+$Fileserver+"\Vorlagen"  
    use z: "\\"+$Fileserver+"\"+@userid+"$"  
    :EndSharing
    ;
    ;
    ; ********************
    ; Alte Drucker löschen
    ; ********************
    If DELPRINTERCONNECTION ("\\"+$PrintServer+"\LaserJet") = 0  
       ? "Alter Laserdrucker wurde erfolgreich entfernt"  
    Endif
    ;
    ;
    ; *****************
    ; Drucker verbinden
    ; *****************
    If ADDPRINTERCONNECTION ("\\"+$PrintServer+"\LaserJetColor") = 0  
       ? "Drucker Farblaserdrucker wurde verbunden"  
    Endif
    If ADDPRINTERCONNECTION ("\\"+$PrintServer+"\LaserZentrale") = 0  
       ? "Drucker Laserdrucker Zentrale wurde verbunden"  
    Endif
    ;
    ;
    ; *******************************
    ; Hardware Informationen auslesen
    ; *******************************
    ;
    : ### Ausgabe auf die Datei "Rechnername_info.txt" umleiten anstelle des Bildschirmes 
    $result=ReDirectOutput ("\\"+$ProtokollServer+"\login$\"+@Hostname+"_info.txt" ,1)  
    ;
    ; ### Ab jetzt werden alle Printanweisungen in die Datei "Rechnername_info.txt" ausgegeben 
      ? "Stand "@DATE" - "@TIME  
      ? ""  
      ? "*** Rechner Information ***"  
      ?"NetBIOS Name:     "@WKSTA  
      ?"Letzter Login von: "@USERID  
      ?"OS: "@PRODUCTTYPE" with "@CSD  
      ?"CPU Modell:  " @CPU  
      ?"CPU Takt:    "@MHZ " MHz"  
      ?"Speicher:    "MemorySize(0)" MB"  
      ?"IP Adresse:  " @IPADRESS0  
      ?"MAC Adresse: "@ADDRESS  
      ?""  
    ;
    ; *******************************
    ; Software Informationen auslesen
    ; *******************************
    ;
    ; ### die installierte Software wird anhand der Uninstall Informationen der Registry ausgelesen, es wird
    ; ### solange gelesen bis im Reg Pfad keine Einträge mehr vorhanden sind, durch den Error wird dann die
    ; ### Schleife zur Sprungmark :Login verlassen
    
    ;
      ?"*** installierte Software ***"   
    $Index = 0
    :Loop1
      $KeyName =   EnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $Index)  
      If @ERROR = 0
        Goto DisplayCheck
        Else
          Goto Login
      EndIf
      :DisplayCheck
      $Displayname =   ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$Keyname","DisplayName")  
      If @ERROR = 0
        $Index = $Index + 1
        ?$Displayname    
        Goto Loop1
      Else
        Goto Login
      endif
    :Login
    ;
    ; ****************************
    ; Login Informationen pro User
    ; ****************************
    ;
    ; ### hier wird die Ausgabe wieder auf die Protokoll Datei für den jeweiligen Tag umgeleitet
    $result=ReDirectOutput ("\\"+$ProtokollServer+"\login$\Anmeldungen " + @YEAR + "."+ @MONTHNO + "." + @MDAYNO + ".txt" ,0)  
    ;
    ; ### jetzt wird geprüft ob die Datei bereits existiert, wenn ja wird der Header nicht noch einmal in die Datei geschrieben
    ; ### da dieser bereits vorhanden ist.
    $logExist=Exist("\\"+$ProtokollServer+"\login$\Anmeldungen " + @YEAR + "."+ @MONTHNO + "." + @MDAYNO + ".txt")  
    if $logExist = 0
      ? "+-------------------------------------------------------------------------------------------------+"  
      ? "¦Benutzername ¦ Client               ¦ Datum      ¦ Uhrzeit  ¦ Anmeldeserver    ¦ i=login o=logout¦"  
      ? "¦-------------+----------------------+------------+----------+------------------+-----------------¦"  
    endif 
    $user = @userid+left("             ",(13-len(@userid)))  
    $client = @WKSTA+left("                   ",(20-len(@WKSTA)))  
    $lserver = @LSERVER+left("                ",(18-len(@LSERVER)))  
    $lserver = right($lserver,(len($lserver)-2))
      ? "¦"$user"$client" ¦ "@DATE" ¦ "@TIME" ¦ "$lserver" ¦ i               ¦"  
    Exit
    </font>
    >>Ende Login.kix<<
    
    <u><b>>>Logoff.kix<<</u></b>-- Ab hier den Inhalt markieren und in die Datei logoff.kix kopieren.
    <font class="code">  
    ; *****************************
    ; Logoff Informationen pro User
    ; *****************************
    ;
    $result=ReDirectOutput ("\\"+$ProtokollServer+"\login$\Anmeldungen " + @YEAR + "."+ @MONTHNO + "." + @MDAYNO + ".txt" ,0)  
    $logExist=Exist("\\"+$ProtokollServer+"\login$\Anmeldungen " + @YEAR + "."+ @MONTHNO + "." + @MDAYNO + ".txt")  
    if $logExist = 0
    	? "+-------------------------------------------------------------------------------------------------+"  
    	? "¦Benutzername ¦ Client               ¦ Datum      ¦ Uhrzeit  ¦ Anmeldeserver    ¦ i=login o=logout¦"  
            ? "¦-------------+----------------------+------------+----------+------------------+-----------------¦"  
    endif 
    $user = @userid+left("             ",(13-len(@userid)))  
    $client = @WKSTA+left("                   ",(20-len(@WKSTA)))  
    $lserver = @LSERVER+left("                ",(18-len(@LSERVER)))  
    $lserver = right($lserver,(len($lserver)-2))
    ? "¦"$user"$client" ¦ "@DATE" ¦ "@TIME" ¦ "$lserver" ¦ o               ¦"  

    Ende Logoff.kix

    Funktion zum entfernen der Leerzeichen in der IP Adresse

    Den Code
    <?"IP Adresse:  " @IPADRESS0>
    mit diesem ersetzen.

    ; ### Dieser Code entfernt Leerzeichen aus der @IPADRESS0
    $a = 0
    $Myarray = Split(@IPADDRESS0 , " ")  
    For Each $Element In $MyArray
     if $a = 0  
        $IP0 = $Element
      endif
      if $a= 1  
        $IP1= $Element
      endif
     if $a= 2  
        $IP2= $Element
       endif
      if $a = 3  
        $IP3 = $Element
      endif
      if $a = 4  
        $IP4 = $Element
      endif
      if $a = 5
        $IP5 = $Element
      endif
     if $a = 6  
        $IP6 = $Element
      endif
      if $a= 7  
        $IP7 = $Element
      endif
     if $a= 8  
        $IP8 = $Element
       endif
      if $a = 9  
        $IP9  = $Element
      endif
      if $a = 10
        $IP10 = $Element
      endif
       $a = $a + 1
    Next
     ?"IP Adresse:  " + +$IP0 + $IP1 + $IP2 + $IP3 + $IP4 + $IP5 + $IP6 + $IP7 + $IP8 + $IP9 + $IP10  

Content-Key: 23917

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

Printed on: April 18, 2024 at 02:04 o'clock

Member: Biber
Biber Jan 18, 2006, updated at Mar 18, 2016 at 11:17:59 (UTC)
Goto Top
Moin CoachCoach,

auch wenn man/frau eigentlich keine Kommentare unter Tutorials schreiben sollte...

Vielen Dank!
@alle zur Info:
Wegen des erhöhten Interesses an KiX in letzter Zeit werde ich mich für die Einrichtung eines Bereichs "KiX" unterhalb "Entwicklung->Programmierung" einsetzen.
Zum besseren Wiederfinden.

Gruß Biber
P.S.
; ### Auch dieser Code entfernt Leerzeichen aus der @IPADRESS0 
Dim $Myarray = Split(@IPADDRESS0 , " ")   
$IP =""  
For Each $Element In $MyArray 
 $IP = $IP + Trim($Element)
Next 
? "IP Adresse: " + $IP  
;--oder dieser:
; ### Auch dieser Code entfernt Leerzeichen aus der @IPADRESS0 
Dim $Myarray = Split(@IPADDRESS0 , ".")   
$IP =Trim($MyArray)+"." +Trim($MyArray[1])+"." Trim($MyArray[2])+"." +Trim($MyArray[3])  
? "IP Adresse: " + $IP  
Member: CouchCoach
CouchCoach Jan 19, 2006 at 12:43:32 (UTC)
Goto Top
Tja so isses halt nunmal, viele Wege führen nach Rom doch kann man immer nur einen gehen.

Nach dem Motto "Der Weg ist das Ziel" bin ich halt mal den längeren gegangenface-wink

Grüße
Mitglied: 6741
6741 Jan 23, 2006 at 11:00:36 (UTC)
Goto Top
Ist der Einsatz der Software auch unter NT4.0 möglich, oder nur mit Active Directory ???
Member: CouchCoach
CouchCoach Jan 23, 2006 at 11:03:09 (UTC)
Goto Top
Kix läuft auch ab Win95 jedoch werden Einige Funktionen erst ab Windows NT unterstützt. Und wenn das OS kleiner wie NT ist benötigt man noch eine spezielle DLL damit KIX unter Win9x / ME läuft.
Also kein Problem mit Windows NT+++
Mitglied: 6741
6741 Jan 23, 2006 at 11:15:04 (UTC)
Goto Top
Hi,

danke für die Info.

Würden denn auch die Scripts laufen, bzw die Abfrage der Rechner nach Software und An und Abmeldezeiten.

Ich habe ein DC NT4.0 auf laufen ...
Member: CouchCoach
CouchCoach Jan 23, 2006 at 11:46:09 (UTC)
Goto Top
juppt, wo es Probleme geben wird ist bei der Verteilung der Drucker, falls du z.B. Windows 2000 oder Pro Clients hast weil der Druckertreiber dann nicht passt.

Grüße
Member: CouchCoach
CouchCoach Jan 23, 2006 at 11:46:57 (UTC)
Goto Top
das ist gemein, wasser im Auge
Member: stash
stash Jan 30, 2006 at 12:58:11 (UTC)
Goto Top
Hallo,

ersteinmal vielen Dank für die Bereitstellung des Skriptes. Ich habs direkt mal bei uns eingebaut und getestet. Eine Frage hab ich aber noch:

Bei der Abfrage der Software-Keys gibt es unter WinXP welche, die einen richtigen Namen haben und auch andere, die ebend nach dem Muster {000-000-000-usw} aufgebaut sind.

Bei mir listet er diese z.b. garnicht auf, obwohl unter jedem einzelnen auch unter "DisplayName" ein Softwarename steht. Desweiteren komtm das Skript ein bisschen ins stocken, wenn auf einmal der Wert "DisplayName" nicht gefüllt ist:

Hier ein Beispiel:

Der Eintag DirectDrawEx hat z.B. keinen Wert. Deswegen gibt das Skript auch einen Fehler zurück und die Schleife beendet sich.

Vielleicht könnt Ihr dieses Problem lösen, da ich just heute erst mit Kix angefangen habe.
Wäre zumindest echt gut für die Einführung.
Ansonsten scheint Kix aber trotzalledem sehr mächtig zu sein. Naja, auf jedenfall mehr, als wie die alten Batch-Skripte.

Gruß, Stash
Member: CouchCoach
CouchCoach Feb 01, 2006 at 08:01:02 (UTC)
Goto Top
Hi Stash,

habe eben deinen Kommentar gelesen, ich werde mich am WE mal dran setzen, da ich zurzeit etwas im Arbeitsstreß bin.

Grüße
Member: knolli75
knolli75 Apr 13, 2006 at 09:09:04 (UTC)
Goto Top
Hallo,
ich habe das Script eingesetzt. Es funktioniert auch ziemlich gut.
Allerdings wird bei mir in der Hardwaredoku bei der IPAdresse nur ein 0 angezeigt.
Unter Installierte Software wird kein Eintrag angelegt.
Wo kann denn da das Problem liegen ?
Member: CouchCoach
CouchCoach Apr 13, 2006 at 09:22:08 (UTC)
Goto Top
Hi Knolli,

es wird hier nur die IP der 1. NIC Karte bzw. Verbindung ausgelesen. Wenn du mehrere NIC´s einsetzt bzw. DFÜ Verbindungen eingerichtet hast könnte hier das Problem liegen.
Versuche einmal anstelle von @ipadress0 @ipadress1 oder 2 etc..

Die installierte Software wird aus der Registry ausgelesen. Welches OS setzt du denn ein? Vielleicht ist bei dir der Reg-Pfad etwas anders (NT 4.0?).

Grüße Kai
Member: knolli75
knolli75 Apr 13, 2006 at 10:16:29 (UTC)
Goto Top
Das nenne ich aber eine schnelle Antwort.
Ich versuche mal die Nr. für die Netzwerkkarte anzupassen.
Mit der Software sieht es so aus, dass die ersten Einträge nicht als Wort sondern als {000-000-000-usw} angezeigt werden. Ich denke dass diese eventuell als error ausgeworfen werden. Wenn dem so ist, wie kann ich es am besten umgehen ?
Member: knolli75
knolli75 Apr 19, 2006 at 09:30:58 (UTC)
Goto Top
Was ist denn wenn die ersten Einträge unter der Software-Übersicht im Format {00000407-78E1-11D2-B60F-006097C998E7} aufgebaut sind ? Die werden wahrscheinlich als Fehler angezeigt und werden in der Übersicht nicht angezeigt, bzw. die Darstellung wird ab dem Eintrag gestoppt. Wie kann ich diese Einträge aber trotzdem mit protokollieren lassen oder vielleicht auslassen ?
Member: backfight
backfight Jan 16, 2007, updated at Mar 18, 2016 at 11:18:35 (UTC)
Goto Top
Hi,
Super Script! Muss ich schon sagen. Die einzige Stelle die mir Probleme macht ist diese hier:

$result=ReDirectOutput ("\\"+$ProtokollServer+"\login$\"+@Hostname+"_info.txt" ,1)

Da speichert er mir nix aufm Server.
Nur wenn ich es so abändern:
$result=ReDirectOutput ("C:\Inventar\"+@Hostname+"_info.txt" ,1)

Aber dann legt er mir die Datein jeweils auf den Rechnern an

Ich vermute es ist nur nen simpler Syntax fehler aber kann mir da jemand helfen?

Gruß
Backfight
Member: CouchCoach
CouchCoach Jan 16, 2007 at 14:40:00 (UTC)
Goto Top
Hi Backfight,

hast du auf dem Protokollserver eine Ordner Freigabe die login$ heißt?


Grüße Kai
Member: CouchCoach
CouchCoach Jan 16, 2007 at 14:40:51 (UTC)
Goto Top
Hi Backfight,

hast du auf dem Protokollserver eine Ordner Freigabe die login$ heißt?


Grüße Kai
Member: backfight
backfight Jan 17, 2007 at 06:56:04 (UTC)
Goto Top
Kommando zurück. Habs hinbekommen.

Mich würde freun, das wenn das Script abgearbeitet ist auf einem Client der sich an der domain anmeldet, so ein kleines fenster kommt mit:

Datum
Zeit
User ID
Full Name
Privilegien
OS Vers.
Computername

Und dann Irgendwie sowas Guten Morgen/ Guten Tag %Username%
Je nach Zeit

Ist das möglich? Wenn ja wie? Ich bekomme die Syntax immernur irgendwie falsch hin *g*

Gruß

Backfight
Member: CouchCoach
CouchCoach Jan 17, 2007 at 08:15:07 (UTC)
Goto Top
Moin Backfight,

also mit einer Messagebox (kleines Fenster halt) würde ich die User nicht belästigen, so was wird aus der Erfahrung heraus einfach weggeklickt und basta. Wenn du, zwecks Help Desk, von den Usern Infos zu deren Rechnern benötigst würde ich die das Tool Background Info (bginfo) empfehlen. Damit kannst du genau die Infos die du genannt hast beim Start des Rechners bzw. nach der Anmeldung auf den Desktop projezieren. Somit sind die Informationen immer griffbereit

Grüße Kai
Member: backfight
backfight Jan 17, 2007 at 09:12:04 (UTC)
Goto Top
Gut hast mich überzeugt.
Kannst du mir denn sagen wie man am besten ein Userlaufwerk auf einem Fileserver mappt?

irgendwie so nach dem motto: use H: \\fileserver\%username%

??

Ich komme mit der syntax nicht klar desswegen frage ich

Oder kann man das noch besser realisieren?

Gruß

Backfight
Member: CouchCoach
CouchCoach Jan 17, 2007 at 09:22:33 (UTC)
Goto Top
Für was soll das Laufwerk den dienen, Profile oder Dateiablage wo nur der jeweilige Benutzer zugriff hat?
Member: backfight
backfight Jan 17, 2007 at 14:09:20 (UTC)
Goto Top
Habs wieder hinbekommen.

Jetzt stehe ich aber vor dem Problem Drucker anzulgen Pro Gruppe im ADS.

Die Drucker sind alle auf dem DomainController installiert.

Wie lautet das Script und wie muss ich vorgehen?

Bitte helft mir noch einmal

Ich denke das werd ich nicht so schnell lösen
Member: backfight
backfight Jan 18, 2007 at 06:11:52 (UTC)
Goto Top
Kann das sein das das Script nur arbeitet wenn man die Drucker im ADS angelegt hat?

Oder geht das auch wenn sie lokal aufm ADS Controller angelegt sind?

Kann mir jemand helfen?

Gruß
Backfight
Member: backfight
backfight Jan 18, 2007 at 11:46:00 (UTC)
Goto Top
Hi Kai,
kannst du mir wohl noch einmal helfen? Ich komm da einfach nicht weiter mit der Druckerzuordnung pro abteilung.

wo könnte der fehler liegen? Kannst du mir ein bsp Script hier posten?

Bin ein wenig unter zeitdruck

Gruß
Backfight
Member: CouchCoach
CouchCoach Jan 18, 2007, updated at Mar 29, 2023 at 23:48:31 (UTC)
Goto Top
Hi Backfight,

also die Drucker müssen nicht im ADS freigegeben sein, werden sie aber in einer Domäne standardmäßig.
Also als erstes den Printserver definieren (bei die dein DC)

$PrintServer = "MeinDC"

So jetzt die einzelnen Gruppen abfragen und die Drucker zuweisen
if ingroup("grpLaserDruckerMono")  
  If ADDPRINTERCONNECTION ("\\"+$PrintServer+"\LaserMono") = 0  
  ? "Drucker Laserdrucker Zentrale wurde verbunden"  
  Endif
goto EndeDrucker
endif

if ingroup("grpLaserDruckerColor")  
  If ADDPRINTERCONNECTION ("\\"+$PrintServer+"\LaserColor") = 0  
  ? "Drucker Laserdrucker Zentrale wurde verbunden"  
  Endif
goto EndeDrucker
endif

:EndeDrucker

und weiter mit deinem Script.....

Grüße Kai

PS.: Wenns noch nicht so klappen will, poste einfach nochmal dein Problem, am besten packst du mal dein script mit rein!!!
Member: backfight
backfight Jan 18, 2007, updated at Mar 18, 2016 at 11:19:09 (UTC)
Goto Top
Funktioniert nicht face-sad

Hier der Code:
;*
; Drucker den Abteilungen zuordnen
;*

$PrintServer = "DC"  

if ingroup("TestGruppe")  
If ADDPRINTERCONNECTION ("\\"+$PrintServer+"\NRG DSm725 Test") = 0  
? "Drucker Laserdrucker Test wurde verbunden"  
Endif
goto EndeDrucker
endif

:EndeDrucker

da mach ich doch sicher was mit der syntax falsch oder?


Gruß
Backfight
Member: CouchCoach
CouchCoach Jan 18, 2007, updated at Mar 18, 2016 at 11:19:25 (UTC)
Goto Top
Probier mal das script hier aus
if ingroup("TestGruppe")  
   ? "JA Benutzer ist in der Gruppe  
endif
Klappt das, dann ersetzte ? "Ja Benutzer.... durch die AddPrinterConnection Anweisung.

Prüfe nach ist der DC eintrag korrekt, stimmt der Freigabename, hast du rechte dich mit dem Drucker zu verbinden.....

Grüße
Member: backfight
backfight Jan 18, 2007, updated at Mar 18, 2016 at 11:19:40 (UTC)
Goto Top
Geht immer noch nicht
Kannst du mir nochmal genau die Syntax sagen?

Wie meinst du das mit Berechtigung? Wo setzt man die denn?
$PrintServer = "DC"  

if ingroup("TestGruppe")  
? "ADDPRINTERCONNECTION ("\\"+$PrintServer+"\NRG DSm725 Test")  
endif
Member: backfight
backfight Jan 19, 2007 at 06:14:36 (UTC)
Goto Top
Hi,
oder kann man die Syntax wirklich so weit ausdehnen? Weil ich hab mal gegoogelt und jeder schreibt den ADPRINTERCONNECTION Befehl irgendwie anders!!??!

Kann mir nochmal jemand helfen?

Gruß

Backfight
Member: Biber
Biber Jan 19, 2007 at 07:27:56 (UTC)
Goto Top
Moin backfive,

Weil ich hab mal gegoogelt ...
WTF is "google"?
...und jeder schreibt den ADPRINTERCONNECTION Befehl irgendwie anders!!??!
Ist das deren Problem oder Deins?

CoachCoach hat doch die "richtige" Syntax vorgekaspert. Ist doch ein Tutorial hier.

"Richtig" in obigem Sinne heißt: konform mit den beiden üblichen KiX-Referenzen "kix2010.doc" und "KiXhelp451.chm", die auf www.Kixtart.org empfohlen werden.
Siehe oben bei CoachCoach.

Um nochmal eine mögliche Fehlerquelle anzugeben:
Syntax
ADDPRINTERCONNECTION ("printer name")

Parameters
Printer name
The (share)name of the printer to which to connect.
> das heißt, Du musst den Drucker unter seinem Freigabe-Namen ansprechen. Und...
When Windows NT connects to the printer, it may copy printer driver files to the local computer.
If the user does not have permission to copy files to the appropriate location, ADDPRINTERCONNECTION fails, and @16034 returns ERROR_ACCESS_DENIED
> Und das wäre auch das sinnvollste: erstmal den (Fehler-)Rückgabewert zu erfahren.

Und bei Deinem letzten geposteten Beispiel ist entweder ein Anführungszeichen zuviel oder zuwenig.
Geht Dein Programm nun in diese InGroup-Verzweigung oder nicht oder weißt Du es nicht?

Gruß
Biber
Member: backfight
backfight Jan 19, 2007 at 07:40:57 (UTC)
Goto Top
Ich weiß es nicht ob das Script in die verzweigung geht. Ich weiß nicht mal wo der Wert dann ausgegeben wird wenn er nicht in den Zweig geht. Ich muss dazu sagen das ich Kix seid 4 oder 5 Tagen kenne/Benutze. Daher keinerleih Ahnung davon habe. Das ich meine vorherigen Probleme hinbekommen habe ist Glück gewesen. Erschwerend kommt dazu das ich auch das erste mal eine Domäne hochziehe / Daher nicht viel Ahnung habe. Also was kann ich machen?

Sorry wenn ich hier nerve
Gruß
Backfight
Member: backfight
backfight Jan 22, 2007 at 06:22:29 (UTC)
Goto Top
Hi all,
kann mir vielleicht nochmal jemand helfen? Bin leider nicht weitergekommen und bekomme somit noch immer keinen Drucker einer Gruppe zugeordnet

Danke im vorraus


Gruß

Backfight
Member: ceng.de
ceng.de Jul 24, 2010, updated at Mar 18, 2016 at 11:20:07 (UTC)
Goto Top
Hat jemand eine Idee, warum dieses Script bei Windows 7 im Bereich Softwareinventar nicht mehr funktioniert?
; Software Informationen auslesen
; *
;
; ### die installierte Software wird anhand der Uninstall Informationen der Registry ausgelesen, es wird
; ### solange gelesen bis im Reg Pfad keine Einträge mehr vorhanden sind, durch den Error wird dann die
; ### Schleife zur Sprungmark :Login verlassen

;
?"* installierte Software *"  
$Index = 0
:Loop1
$KeyName = EnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $Index)  
If @ERROR = 0
Goto DisplayCheck
Else
Goto Login
EndIf
:DisplayCheck
$Displayname = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$Keyname","DisplayName")  
If @ERROR = 0
$Index = $Index + 1
?$Displayname
Goto Loop1
Else
Goto Login
endif
--> Der Pfad besteht noch so in Windows 7

Hier zum Vergleich ein Eintrag aus meinem Uninstall Hive...
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver]
"DisplayName"="WinRAR"  
"UninstallString"="C:\\Program Files\\WinRAR\\uninstall.exe"  
"DisplayIcon"="C:\\Program Files\\WinRAR\\WinRAR.exe"  
"NoModify"=dword:00000001  
"NoRepair"=dword:00000001  
Member: TxWcA
TxWcA Aug 11, 2010 at 11:38:29 (UTC)
Goto Top
Hallo zusammen

Ich habe versucht das Script nachzubauen, jedoch ohne Erfolg.
Hab zuerst die Version von Kix 461 runtergeladen und die kix32.exe in einen Ordner lokal mit dem Namen kix gelegt. Dorthin habe ich dann die login.kix erstellt, welche wie folgt aussieht.

Auf dem FileServer habe ich eine Freigabe login$ erstellt welche per \\ FileServer\login$ erreichbar ist und jeder User reinschreiben darf und kann.
Wenn ich nun eine CMD öffne mich auf den Ordner per CMD stelle wo die kix32.exe sich drin befindet und das login.kix und ich den Befehl absetzte:
Kix32.exe login.kix
Bekomme ich folgende Meldung:
ERROR: unexepected command!
Script: C:\Kix\login.kix
Line: 1
Hier mein Script:
; ### Das Anmeldeskript soll sichtbar ausgeführt werden und das Fenster für das Skript erhält mit SETTITLE eine Bezeichnung.
; ### Hier könnte stehen der Firmenname, auch Datum und Uhrzeit oder Informationen für Mitarbeiter.
; ### Wobei diese auch mit einer MessageBox realisiert werden können.
;
SETCONSOLE("show")  
SETCONSOLE("maximized")  
SETTITLE("Anmeldeskript für Meine Domäne ")  
;
;
; *
; Variablen deklarieren
; *
;
$FileServer="FileServer"  
; ### Name des Servers auf welchem sich die Freigaben befinden
; ### alternativ kann auch natürlich auch eine IP-Adresse angegeben werden
;
$ProtokollServer="FileServer"  
; ### Name des Servers auf welchem die Freigabe für die Dokumentation
; ### der An- und Abmeldungen sowie der Rechner Infos liegt
;
$PrintServer="FileServer"  
; ### Name des Servers auf welchem (falls vorhanden) die Drucker
; ### eingerichtet und freigegeben sind die verbunden werden sollen
;
;
; Alle vorhandenen Netzlaufwerke löschen
;
use "*" /delete  
;
;
; *
; Netzlaufwerke Gruppen bezogen verbinden
; *
;
if ingroup("grpFibu")  
use f: "\\"+$FileServer+"\Fibu"  
endif
if ingroup("grpITadministration")  
use z: "\\"+$ FileServer +"\admin-win"  
endif
if ingroup ("grpMarketing")  
if m: "\\"+$ FileServer +"\marketing"  
endif
if ingroup ("grpGef")  
use n: "\\"+$ FileServer +"\gef"  
endif
if ingroup ("grpControlling")  
use k: "\\"+$ FileServer +"\controlling"  
endif
if ingroup ("grpfile-sek-gf")  
use o: "\\"+$ FileServer +"\file-sek-gef"  
endif

; ### Für weitere Freigaben einfach einen oberen Block kopieren und anfügen
;
;
;
; Netzlaufwerke Benutzer bezogen verbinden
;
if @userid="Administrator"  
use x: "\\"+$ FileServer +"\login$"  
;das ist die Freigabe wo die Login Protokolle abgelegt werden
;natürlich soll diese nur der Admininstrator sehen
endif
;
;Netzlaufwerk für Admin1 und Admin2 weil dies ein IT-Administrations-Laufwerk ist
if @userid="Admin1"  
use y: "\\"+$ FileServer +"\it-administration$"  
endif
if @userid="Admin2"  
use y: "\\"+$ FileServer +"\it-administration$"  
endif
if @userid="Gast"  
use p: "\\"+$Fileserver+"\public"  
goto EndSharing
endif
;
;
;
; Netzlaufwerke für jeden User verbinden
;
use p: "\\"+$ FileServer +"\ablage"  
use r: "\\"+$ FileServer +"\Projekte"  
use t: "\\"+$ FileServer +"\Technik"  
use u: "\\"+$ FileServer +"\"+@userid+"$"  
:EndSharing
;
;
;
; Alte Drucker löschen
;
;If DELPRINTERCONNECTION ("\\"+$FileServer +"\LaserJet") = 0  
;? "Alter Laserdrucker wurde erfolgreich entfernt"  
;Endif
;
;
; *
; Drucker verbinden
; *
;If ADDPRINTERCONNECTION ("\\"+$FileServer +"\LaserJetColor") = 0  
;? "Drucker Farblaserdrucker wurde verbunden"  
;Endif
;If ADDPRINTERCONNECTION ("\\"+$FileServer +"\LaserZentrale") = 0  
;? "Drucker Laserdrucker Zentrale wurde verbunden"  
;Endif
;
;
; *
; Hardware Informationen auslesen
; *
;
: ### Ausgabe auf die Datei "Rechnername_info.txt" umleiten anstelle des Bildschirmes 
$result=ReDirectOutput ("\\"+$FileServer +"\login$\"+@Hostname+"_info.txt" ,1)  
;
; ### Ab jetzt werden alle Printanweisungen in die Datei "Rechnername_info.txt" ausgegeben 
? "Stand "@DATE" - "@TIME  
? ""  
? "* Rechner Information *"  
?"NetBIOS Name: "@WKSTA  
?"Letzter Login von: "@USERID  
?"OS: "@PRODUCTTYPE" with "@CSD  
?"CPU Modell: " @CPU  
?"CPU Takt: "@MHZ " MHz"  
?"Speicher: "MemorySize(0)" MB"  
?"IP Adresse: " @IPADRESS0  
?"MAC Adresse: "@ADDRESS  
?""  
;
; *
; Software Informationen auslesen
; *
;
; ### die installierte Software wird anhand der Uninstall Informationen der Registry ausgelesen, es wird
; ### solange gelesen bis im Reg Pfad keine Einträge mehr vorhanden sind, durch den Error wird dann die
; ### Schleife zur Sprungmark :Login verlassen

;
?"* installierte Software *"  
$Index = 0
:Loop1
$KeyName = EnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $Index)  
If @ERROR = 0
Goto DisplayCheck
Else
Goto Login
EndIf
:DisplayCheck
$Displayname = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$Keyname","DisplayName")  
If @ERROR = 0
$Index = $Index + 1
?$Displayname
Goto Loop1
Else
Goto Login
endif
:Login
;
;
; Login Informationen pro User
;
;
; ### hier wird die Ausgabe wieder auf die Protokoll Datei für den jeweiligen Tag umgeleitet
$result=ReDirectOutput ("\\"+$FileServer +"\login$\Anmeldungen " + @YEAR + "."+ @MONTHNO + "." + @MDAYNO + ".txt" ,0)  
;
; ### jetzt wird geprüft ob die Datei bereits existiert, wenn ja wird der Header nicht noch einmal in die Datei geschrieben
; ### da dieser bereits vorhanden ist.
$logExist=Exist("\\"+$FileServer +"\login$\Anmeldungen " + @YEAR + "."+ @MONTHNO + "." + @MDAYNO + ".txt")  
if $logExist = 0
? "+-------------------------------------------------------------------------------------------------+"  
? "¦Benutzername ¦ Client ¦ Datum ¦ Uhrzeit ¦ Anmeldeserver ¦ i=login o=logout¦"  
? "¦-------------+----------------------+------------+----------+------------------+-----------------¦"  
endif
$user = @userid+left(" ",(13-len(@userid)))  
$client = @WKSTA+left(" ",(20-len(@WKSTA)))  
$lserver = @LSERVER+left(" ",(18-len(@LSERVER)))  
$lserver = right($lserver,(len($lserver)-2))
? "¦"$user"$client" ¦ "@DATE" ¦ "@TIME" ¦ "$lserver" ¦ i ¦"  
Exit
Ende Login.kix<<


Auch wäre es super Toll wenn ich z.b. die Keys von Windows, Office usw. auslesen könnte.


[Edit Biber] <font class=code> duch heutige Codeformatierung ersetzt. Siehe unten [/Edit]
Member: Biber
Biber Aug 11, 2010 at 20:20:08 (UTC)
Goto Top
Moin TxWcA,

möglicherweise hattest du die oben noch verwendete "alte" Codeformatierung für bare Münze bzw. für KiX-Code mit übernommen?
Diese -Klamotte?

ich habe deinen zitierten Code jedenfalls mal als "Code" formatiert, so dass du ihn mal jetzt kopieren kannst.

sollte es etwas anderes sein, dann machen wir natürlich weiter...

Grüße
Biber
Member: TxWcA
TxWcA Aug 12, 2010 at 06:18:43 (UTC)
Goto Top
Hallo BiBer

okay ich hab diese Font Sache nun entfernt.

Dies habe ich in der CMD als Antwort bekommen:

C:\kix>kix32.exe login.kix
0870
C:\kix>

Wenn ich nun auf dem Share \\FileServer\login$ nachschaue liegt da aber kein File.