cheops
Goto Top

Mit Kix Drucker auf Client auslesen und wenn auf falschem Server, auf neuen verbinden

Hallo Leute,

ich möchte gerne mein Kix Loginscript so anpassen, dass automatisch Drucker von einem alten Server auf einen neuen verbunden werden.

Das Script soll also abfragen: Ist ein Drucker von Server1 verbunden, wenn ja, verbinde ihn von Server2 und lösche auf dem Client die Verbindung zu Server1.

Hat jemand eine Idee wie ich so etwas bewerkstelligen kann?

Gruß

Content-Key: 29798

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

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

Member: Dani
Dani Apr 05, 2006 at 18:22:57 (UTC)
Goto Top
G' Abend,
dann probier's ich einfach mal:

;Console Verstecken
$tmp = SetConsole("SHOW");  

;Variablen
$server = "SERVER"  
$drucker = "DRUCKERFREIGABENAME"  

;Löscht den alten Drucker
If DelPrinterConnection ("\\SERVER\ALTERDRUCKER") = 0  
 "Deleted printer connection...."  

 ;Erstellt neuen Drucker und setzt ihn als Standard
 If ADDPRINTERCONNECTION ("\\" + $server + "\" + $drucker) = 0  
  "Added printer connection...."  
  If SetDefaultPrinter ("\\" + $server + "\" + $drucker) = 0  
   "Set default printer...."  
  EndIf
 Endif
Endif

;Wartet 10 Sekunden
Sleep 10

Es müsste eigentlich gehen..Viel Spaß. Falls du Fragen hast, einfach melden..


Gruß
Dani
Member: superboh
superboh Apr 06, 2006 at 03:41:59 (UTC)
Goto Top
Hi,

ich hatte das gleiche Problem auch mal und hab dazu für ein paar Tage einige Zeilen ins Login-Script gehängt:

;=========================================
; Kix-Script   -   Change PrintServer.Kix
;=========================================

Break on

$prtsrvold="\\Server1"  
$prtsrvnew="\\Server8"  
$Index = 0
$TempPrinter = ""  

;----------------------------------------------------
;Erstellt eine Liste mit allen installierten Druckern
;----------------------------------------------------

Dim $PrinterArray[40]
:Loop
 If @ERROR=0
  $TempPrinter = $TempPrinter + EnumValue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$Index) + ","  
  $Index = $Index + 1
  GoTo "Loop"  
 EndIf

$TempPrinter = Trim($TempPrinter)
$Length = Len("$TempPrinter") - 2  
$TempPrinter = Left("$TempPrinter","$Length")  
$PrinterArray = Split("$TempPrinter",",")  

;------------------------------
;Ermittelt den Standard Drucker
;------------------------------

$DefaultPrinter = ReadValue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device")  
If $DefaultPrinter <> ""  
 $End = InStr("$DefaultPrinter",",") - 1  
 $DefaultPrinter = Left("$DefaultPrinter","$End")  
Else 
  $DefaultPrinter = "none"  
EndIf 

;---------------------
;Gibt Status-Infos aus
;---------------------

;? "Standard-Drucker: " + $DefaultPrinter  
;? ? "Liste aller Drucker:" ? ?  

;--------------------------------------------------------------------------------------
;trennt alle Netzwerkdrucker vom alten Server und verbindet sie wieder vom neuen Server
;--------------------------------------------------------------------------------------

For $Count = 0 to $Index-2
  If Left($PrinterArray[$Count],Len($prtsrvold))=$prtsrvold	; nur Netzwerk-Drucker auf dem bisherigen Print-Server
    ;? $PrinterArray[$Count]
    $rc=DelPrinterConnection ($PrinterArray[$Count])
    ? $PrinterArray[$Count]" gelöscht"  
    $newprt=$prtsrvnew+SubStr ($PrinterArray[$Count],Len($prtsrvold)+1,200)
    $rc=AddPrinterConnection ($newprt)
    ? $newprt" neu verbunden"  
  EndIf    
Next

;---------------------------------------
;Stellt den "alten" Standard-Drucker ein  
;---------------------------------------

If $DefaultPrinter <> "none"						  
  If Left($DefaultPrinter,Len($prtsrvold))=$prtsrvold ; Standard-Drucker ist ein Netzwerk-Drucker
    $newprt=$prtsrvnew+SubStr ($DefaultPrinter,Len($prtsrvold)+1,200) ; 
    $rc=SetDefaultPrinter ($newprt) ; "neuer" Standard-Drucker gesetzt  
    ? ? "neuer Standard-Drucker "$newprt" eingestellt"  
  EndIf
EndIf

Es werden alle verbundenen Drucker ausgelesen, gelöscht und auf dem neuen Server wieder verbunden. Auch der Standard-Drucker wird wieder eingestellt. Einzige die Druckernamen müssen halt auf beiden Servern identisch sein.
Teilweise sind im Script noch ein paar Textausgaben übrig geblieben, welche ich zum Testen eingebaut hatte und es lässt sich sicher auch noch optimieren face-smile.

Gruß,
Thomas
Member: Cheops
Cheops Apr 06, 2006 at 08:37:26 (UTC)
Goto Top
Vielen Dank @Dani und @superboh,

ihr habt mir sehr weiter geholfen. War genau das was ich gebraucht habe.

Vielen Dank

Grüße
Member: SMHAMK1985
SMHAMK1985 Jun 15, 2006 at 13:36:32 (UTC)
Goto Top
Hi,

ich hatte das gleiche Problem auch mal und
hab dazu für ein paar Tage einige
Zeilen ins Login-Script gehängt:

;=========================================
> ; Kix-Script   -   Change PrintServer.Kix
> ;=========================================
> 
> Break on
> 
> $prtsrvold="\\Server1"  
> $prtsrvnew="\\Server8"  
> $Index = 0
> $TempPrinter = ""  
> 
> ;----------------------------------------------------
> ;Erstellt eine Liste mit allen installierten
> Druckern
> ;----------------------------------------------------
> 
> Dim $PrinterArray[40]
> :Loop
>  If @ERROR=0
>   $TempPrinter = $TempPrinter +
> EnumValue("HKEY_CURRENT_USER\Software\Microsoft\Windows  
> NT\CurrentVersion\PrinterPorts",$Index)  
> + ","  
>   $Index = $Index + 1
>   GoTo "Loop"  
>  EndIf
> 
> $TempPrinter = Trim($TempPrinter)
> $Length = Len("$TempPrinter") - 2  
> $TempPrinter =
> Left("$TempPrinter","$Length")  
> $PrinterArray =
> Split("$TempPrinter",",")  
> 
> ;------------------------------
> ;Ermittelt den Standard Drucker
> ;------------------------------
> 
> $DefaultPrinter =
> ReadValue("HKEY_CURRENT_USER\Software\Microsoft\Windows  
> NT\CurrentVersion\Windows","Device")  
> If $DefaultPrinter <> ""  
>  $End =
> InStr("$DefaultPrinter",",")  
> - 1
>  $DefaultPrinter =
> Left("$DefaultPrinter","$End")  
> Else 
>   $DefaultPrinter = "none"  
> EndIf 
> 
> ;---------------------
> ;Gibt Status-Infos aus
> ;---------------------
> 
> ;? "Standard-Drucker: " +  
> $DefaultPrinter
> ;? ? "Liste aller Drucker:" ? ?  
> 
> ;--------------------------------------------------------------------------------------
> ;trennt alle Netzwerkdrucker vom alten
> Server und verbindet sie wieder vom neuen
> Server
> ;--------------------------------------------------------------------------------------
> 
> For $Count = 0 to $Index-2
>   If
> Left($PrinterArray[$Count],Len($prtsrvold))=$prtsrvold	;
> nur Netzwerk-Drucker auf dem bisherigen
> Print-Server
>     ;? $PrinterArray[$Count]
>     ;$rc=DelPrinterConnection
> ($PrinterArray[$Count])
>     ? $PrinterArray[$Count]"  
> gelöscht"  
>     $newprt=$prtsrvnew+SubStr
> ($PrinterArray[$Count],Len($prtsrvold)+1,200)
>     ;$rc=AddPrinterConnection ($newprt)
>     ? $newprt" neu verbunden"  
>   EndIf    
> Next
> 
> ;---------------------------------------
> ;Stellt den "alten"  
> Standard-Drucker ein
> ;---------------------------------------
> 
> If $DefaultPrinter <>
> "none"						  
>   If
> Left($DefaultPrinter,Len($prtsrvold))=$prtsrvold
> ; Standard-Drucker ist ein Netzwerk-Drucker
>     $newprt=$prtsrvnew+SubStr
> ($DefaultPrinter,Len($prtsrvold)+1,200) ; 
>     ;$rc=SetDefaultPrinter ($newprt) ;
> "neuer" Standard-Drucker gesetzt  
>     ? ? "neuer Standard-Drucker  
> "$newprt" eingestellt"  
>   EndIf
> EndIf
> 

Es werden alle verbundenen Drucker
ausgelesen, gelöscht und auf dem neuen
Server wieder verbunden. Auch der
Standard-Drucker wird wieder eingestellt.
Einzige die Druckernamen müssen halt
auf beiden Servern identisch sein.
Teilweise sind im Script noch ein paar
Textausgaben übrig geblieben, welche
ich zum Testen eingebaut hatte und es
lässt sich sicher auch noch optimieren
face-smile.

Gruß,
Thomas


Hallo Thomas,

ich habe da nochmal ne Frage.

Ich möchte gerne alle Drucker die Installiert sind auslesen und in eine Log-Datei schreiben lassen.

Soweit mit dem Drucker lesen und schreiben der Log-Datei erfolgt, bloß er löscht mir immer meine Netzdrucker.

Hier mal das Code:
break on

$Index = 0
$TempPrinter = ""

;Erstellt eine Liste mit allen installierten Druckern

Dim $PrinterArray[40]
:Loop
If @16034=0
$TempPrinter = $TempPrinter + EnumValue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$index) + ","
$Index = $Index + 1
GoTo "Loop"
EndIf

$TempPrinter = Trim($TempPrinter)
$Length = Len("$TempPrinter") - 2
$TempPrinter = Left("$TempPrinter","$Length")
$PrinterArray = Split("$TempPrinter",",")

;Schreiben der Log-Datei
$result=ReDirectOutput ("\\wst-w2k-file\kix-scripte$\Log-Dateien\"+@USERID+"_info.txt" ,1)
?"Stand "@DATE" - "@TIME
?"Letzter Login von: "@USERID
?"NetBIOS Name: "@WKSTA
?;
?;
?;
?"Drucker: "
?;
For $Count = 0 to $Index-2
? $PrinterArray[$Count]
Next
;;*

Und als info mal, wozu ist denn die variable $index?

Danke für deine Hilfe

MfG
Member: superboh
superboh Jun 18, 2006 at 20:22:27 (UTC)
Goto Top
Hi,

also bei mir tut Dein Script was es soll ... es wird folgender Text erzeugt:

Stand 2006/06/18 - 22:11:02
Letzter Login von: Thomas
NetBIOS Name: Client2

Drucker:
\\WinServer1\HP Color LaserJet 2500 PCL 6
\\WinServer1\HP LaserJet 2500 (SW)
\\WinServer1\PDF Writer


Und für was die Variable $index da ist ...

Mittels EnumValue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$Index) frage ich die Liste der Drucker unter dem entsprechenden Registry-Key ab. Dabei bestimmt der Wert von $index welcher Eintrag aus der Liste ausgelesen wird.
Beim Ausgeben der Liste dann wird $index wieder verwendet, um auf die einzelnen Positionen im Array zuzugreifen. Der Wert von $index ist in dem Fall aber 2 zu hoch, daher $index-2.

Gruß,
Thomas
Member: SMHAMK1985
SMHAMK1985 Jun 18, 2006 at 20:31:42 (UTC)
Goto Top
Hallo,

erstmal Danke für deine Hilfe face-smile

Das Problem mit dem gelöschten Drucker hat doch nichts damit zutun. Nach 4-5 stunden suche habe ich festgestellt, dass ein anderer script im hintergrund lief face-smile

Und nochmal Danke für die erklärung der variable INDEX ;)

MfG
Member: Nadinchen
Nadinchen Jul 24, 2006 at 11:56:11 (UTC)
Goto Top
Hi,

ich hatte das gleiche Problem auch mal und
hab dazu für ein paar Tage einige
Zeilen ins Login-Script gehängt:

;=========================================
> ; Kix-Script   -   Change PrintServer.Kix
> ;=========================================
> 
> Break on
> 
> $prtsrvold="\\Server1"  
> $prtsrvnew="\\Server8"  
> $Index = 0
> $TempPrinter = ""  
> 
> ;----------------------------------------------------
> ;Erstellt eine Liste mit allen installierten
> Druckern
> ;----------------------------------------------------
> 
> Dim $PrinterArray[40]
> :Loop
>  If @ERROR=0
>   $TempPrinter = $TempPrinter +
> EnumValue("HKEY_CURRENT_USER\Software\Microsoft\Windows  
> NT\CurrentVersion\PrinterPorts",$Index)  
> + ","  
>   $Index = $Index + 1
>   GoTo "Loop"  
>  EndIf
> 
> $TempPrinter = Trim($TempPrinter)
> $Length = Len("$TempPrinter") - 2  
> $TempPrinter =
> Left("$TempPrinter","$Length")  
> $PrinterArray =
> Split("$TempPrinter",",")  
> 
> ;------------------------------
> ;Ermittelt den Standard Drucker
> ;------------------------------
> 
> $DefaultPrinter =
> ReadValue("HKEY_CURRENT_USER\Software\Microsoft\Windows  
> NT\CurrentVersion\Windows","Device")  
> If $DefaultPrinter <> ""  
>  $End =
> InStr("$DefaultPrinter",",")  
> - 1
>  $DefaultPrinter =
> Left("$DefaultPrinter","$End")  
> Else 
>   $DefaultPrinter = "none"  
> EndIf 
> 
> ;---------------------
> ;Gibt Status-Infos aus
> ;---------------------
> 
> ;? "Standard-Drucker: " +  
> $DefaultPrinter
> ;? ? "Liste aller Drucker:" ? ?  
> 
> ;--------------------------------------------------------------------------------------
> ;trennt alle Netzwerkdrucker vom alten
> Server und verbindet sie wieder vom neuen
> Server
> ;--------------------------------------------------------------------------------------
> 
> For $Count = 0 to $Index-2
>   If
> Left($PrinterArray[$Count],Len($prtsrvold))=$prtsrvold	;
> nur Netzwerk-Drucker auf dem bisherigen
> Print-Server
>     ;? $PrinterArray[$Count]
>     ;$rc=DelPrinterConnection
> ($PrinterArray[$Count])
>     ? $PrinterArray[$Count]"  
> gelöscht"  
>     $newprt=$prtsrvnew+SubStr
> ($PrinterArray[$Count],Len($prtsrvold)+1,200)
>     ;$rc=AddPrinterConnection ($newprt)
>     ? $newprt" neu verbunden"  
>   EndIf    
> Next
> 
> ;---------------------------------------
> ;Stellt den "alten"  
> Standard-Drucker ein
> ;---------------------------------------
> 
> If $DefaultPrinter <>
> "none"						  
>   If
> Left($DefaultPrinter,Len($prtsrvold))=$prtsrvold
> ; Standard-Drucker ist ein Netzwerk-Drucker
>     $newprt=$prtsrvnew+SubStr
> ($DefaultPrinter,Len($prtsrvold)+1,200) ; 
>     ;$rc=SetDefaultPrinter ($newprt) ;
> "neuer" Standard-Drucker gesetzt  
>     ? ? "neuer Standard-Drucker  
> "$newprt" eingestellt"  
>   EndIf
> EndIf
> 

Es werden alle verbundenen Drucker
ausgelesen, gelöscht und auf dem neuen
Server wieder verbunden. Auch der
Standard-Drucker wird wieder eingestellt.
Einzige die Druckernamen müssen halt
auf beiden Servern identisch sein.
Teilweise sind im Script noch ein paar
Textausgaben übrig geblieben, welche
ich zum Testen eingebaut hatte und es
lässt sich sicher auch noch optimieren
face-smile.

Gruß,
Thomas


Hallo!

Habe das obige Skript bei uns auch mal getestet. Habe das Problem, dass das Skript zwar ausgibt, die Drucker geändert zu haben, es allerdings nicht tut. Kann das sein, dass es nur funktioniert, wenn die Drucker vorher auch mit einem Kix Skript und ADDPRINTERCONNECTION angelegt worden sind?

Danke für eure Hilfe.

Nadine
Member: superboh
superboh Jul 24, 2006 at 15:54:25 (UTC)
Goto Top
Hallo Nadine,

im Abschnitt "trennt alle Netzwerkdrucker..." musst Du noch den Strichpunkt vor den beiden Zeilen mit "DelPrinterConnection" und "AddPrinterConnection" rausmachen. Ebenfalls im Abschnitt "Stellt Standard-Drucker ein" bei "SetDefaultPrinter".

Ich habe es in meinem Beitrag schon geändert. Die Zeilen hatte ich wohl auskommentiert um den Script-Schnippsel nochmal zu testen.

Gruß,
Thomas