Drucker über Konsole installieren

  • Hallöchen,
    habe ein kleines Problemchen mit meiner Druckerverwaltung. Ich wollte Drucker gerne per Script bzw. über die Kommandozeile löschen. Das bringt Windows ja von Haus aus schon mit.

    rundll32 printui.dll,PrintUIEntry /gd /c\\Computer /n\\Computer\Drucker

    Wenn ich es jetzt meinen Bedürfnissen anpasse, bekomme ich nur eine Fehlermeldung. Sonst passiert nichts.

    Also:

    rundll32 printui.dll,PrintUIEntry /gd /c\\meinPC /n\\meinPC\Lexmark T430 PS

    Fehlermeldung:
    "Pro Maschine Druckerverbindungen können nicht gelöscht werden. Der Vorgang konnte nicht abgeschlossen werden."

    Das geschieht bei lokalen und bei Netzwerkdruckern. Wie kann das sein?

  • Schön und gut, bringt mich bei meinem Problem aber nicht weiter.
    Ist das gleiche wenn ich "rundll32 printui.dll PrintUIEntry /?" auf der
    Kommandozeile eingebe... Nur noch mit einer Einleitung...

    • Offizieller Beitrag

    Hmnmh, also bei funktioniert das in einer CMD.

    rundll32 printui.dll,PrintUIEntry /dn /n\\cupssrv01\GAD074-HP-LJ4650

    Den Druckernamen habe ich so ermittelt.

    [autoit]

    $hService = ObjGet("winmgmts:{impersonationLevel=impersonate}!" & "\\" & @ComputerName & "\root\cimv2")
    $sPrinterList = $hService.ExecQuery ("Select * From Win32_Printer")
    ConsoleWrite('$sPrinterList.count = ' & $sPrinterList.count & @lf)
    For $sPrinter In $sPrinterList
    ConsoleWrite('$sPrinter.name = ' & $sPrinter.name & @LF)
    Next

    [/autoit]
  • Entschuldige die blöde Frage, aber wie verwende ich dein Script? 8| Neues Script und ausführen bringt irgendwie nichts :P
    Ich habe verschieden rundll32-Befehle direkt auf Kommandozeile ausprobiert.
    Heute bekomme ich eine andere Fehlermeldung, beim Öffnen der Druckereigenschaften.
    "die druckereigenschaften können nicht angezeigt werden. entwerder der eingegeben druckername ist ungültig, oder der angegeben drucker ist nicht mehr mit dem server verbunden."
    Weiß nicht was ich damit anfangen soll. Druckernamen habe ich copy paste eingefügt und der Drucker ist immernoch da!

    Edit: "Der Druckerwarteschlangedienst wird nicht ausgeführt" ... Was hat das nun wieder zu bedeuten?!
    Edit2: Warteschlangendienst ist "gestartet"...

    Einmal editiert, zuletzt von Scritch (4. Mai 2011 um 08:59)

    • Offizieller Beitrag

    Probier mal

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    $re = _getAllPrinterNames()
    $s = ''
    For $i = 1 To UBound($re) - 1
    $s &= $i & ' : ' & $re[$i] & @CRLF
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $nr = InputBox('Drucker löschen', 'Welcher Drucker soll gelöscht werden?' & @CRLF & $s, '', '', 550, 500)
    If Not @error Then _deletePrinter($nr)

    [/autoit] [autoit][/autoit] [autoit]

    Func _getAllPrinterNames()
    Local $hService = ObjGet("winmgmts:{impersonationLevel=impersonate}!" & "\\" & @ComputerName & "\root\cimv2")
    Local $sPrinterList = $hService.ExecQuery("Select * From Win32_Printer")
    Local $priner_A[1]
    ConsoleWrite($sPrinterList.count & @CRLF)
    For $sPrinter In $sPrinterList
    _ArrayAdd($priner_A, $sPrinter.name)
    Next
    Return $priner_A
    EndFunc ;==>_getAllPrinterNames

    [/autoit] [autoit][/autoit] [autoit]

    Func _deletePrinter($n)
    ;~ Run('rundll32 printui.dll,PrintUIEntry /p /n ' & $re[$n])
    Run('rundll32 printui.dll,PrintUIEntry /dn /n ' & $re[$n])
    EndFunc ;==>_deletePrinter

    [/autoit]
  • Hallo,

    sofern du wirklich sicher bist, das die Syntax des rundll Befehls richtig übergeben wird, prüfe einmal folgende Dinge:

    Ist der Druckwarteschlangendienst am Rechner gestartet (net start Spooler)

    Möchtest du an deinem Rechner etwas de/installieren oder an einem entfernetem Host im Netzwerk?
    In dem Falle solltest prüfen, ob auf der Zielmaschine der RemoteRegistry Dienst aktiviert ist.

    Ansonsten hab ich hier mal ein Praxisbeispiel aus meinem Tool:

    rundll32 printui.dll,PrintUIEntry /dl /c \\Y******* /n "Y*****9-Normaldruck" /q

    edit:

    Mir fällt grad auf:
    rundll32 printui.dll,PrintUIEntry /gd /c\\meinPC /n\\meinPC\Lexmark T430 PS

    Bei dir fehlen die Anführungszeichen beim Drucker (wg. Leerstellen):
    rundll32 printui.dll,PrintUIEntry /gd /c\\meinPC /n "\\meinPC\Lexmark T430 PS"

    Einmal editiert, zuletzt von presgomacho (16. Mai 2011 um 11:11)

  • Moin,
    danke für die Hilfe. Du hast Recht, die Anführungszeichen fehlen. Führe ich den Befehl mit " aus, dann sagt er mir, dass der D ruckerwarteschlangendienst nicht läuft. Starte ich ihn, probiers dann nochmal sagt er mir das gleiche! Ich möchte den Druckr auf meinen PC löschen, nicht auf einen einem entfernten. Wenn das lokal geschehen soll, muss die Remoteregistry ja nicht aktiviert sein, oder? Drucker über die Konsole zu installieren funktioniert einwandfrei.

  • Okay,

    probier mal folgendes aus:

    [autoit]

    net stop spooler
    net start spooler
    rundll32 printui.dll,PrintUIEntry /dl /n "Lexmark T430 PS" /q
    net stop spooler
    net start spooler

    [/autoit]

    Evtl. läuft dein Spooler momentan auch fehlerhaft, dann hilft es meistens diesen neu zu starten.
    Wichtig ist, das du einen lokalen Drucker mit dem Parameter /dl und nicht /gd löscht.
    Der /gd Parameter ist nur für Maschinenverbindungen.

    Ich starte den Spooler immer recht häufig neu in meinen Skripts, da es eben zu diesen Fehlern kommt, wenn man viel an den Druckern eines PCs werkelt (zumindest über Konsole)

    edit: Ach ja, RemoteRegistry brauchst du nur wenn du an einer entfernten Maschine Aktionen vornehmen möchtest!