Mit Powershell Drucker hinzufügen

Hallo Community

Ich versuche über Powershell einen Drucker zu erstellen. Leider wird das Druckerobjekt nicht erstellt.
Was könnte an meinem Skript falsch sein?

Invoke-Command -ComputerName $env:computername -Scriptblock {rundll32 printui.dll,PrintUIEntry /dl /n "DYMO LabelWriter 450 Twin Turbo"}
Invoke-Command -ComputerName $env:computername -Scriptblock {Cscript C:\Windows\System32\Printing_Admin_Scripts\de-DE\prnport.vbs -a -r IP_192.168.33.53 -h 192.168.33.53 -o raw -n 9100}
Start-Sleep -Seconds 5
Invoke-Command -ComputerName $env:computername -Scriptblock {rundll32 printui.dll,PrintUIEntry /if /b "DYMO LabelWriter 450 Twin Turbo" /f "$PSScriptRoot\Drivers\DYMO.inf" /r "IP_192.168.33.53" /m "DYMO LabelWriter 450 Twin Turbo"}


Im Voraus vielen Dank für Eure Hilfe
Ralus67

Content-Key: 638569

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

Ausgedruckt am: 17.01.2022 um 10:01 Uhr

Mitglied: Ralus67
Ralus67 07.01.2021 um 12:08:12 Uhr
Goto Top
Als weitere Info. Die Treiber sowie der Port mit definierter IP-Adresse werden installiert bzw. erstellt.

Lediglich der letzte Befehl
Invoke-Command -ComputerName $env:computername -Scriptblock {rundll32 printui.dll,PrintUIEntry /if /b "DYMO LabelWriter 450 Twin Turbo" /f "$PSScriptRoot\Drivers\DYMO.inf" /r "IP_192.168.33.53" /m "DYMO LabelWriter 450 Twin Turbo"}

erstellt mir kein Drucker Objekt.

Führe ich jedoch den Befehl in einer cmd aus, dann funktioniert es.
rundll32 printui.dll,PrintUIEntry /if /b "DYMO LabelWriter 450 Twin Turbo" /f "$PSScriptRoot\Drivers\DYMO.inf" /r "IP_192.168.33.53" /m "DYMO LabelWriter 450 Twin Turbo"

Hat jemand eine Lösung?
Mitglied: mayho33
mayho33 07.01.2021 aktualisiert um 12:50:53 Uhr
Goto Top
Zitat von @Ralus67:

Hallo Community

Ich versuche über Powershell einen Drucker zu erstellen. Leider wird das Druckerobjekt nicht erstellt.

Wen es in CMD so funktioniert, dann übergib das ganze doch einfach an die Comspec:



Noch ein kleiner Hinweis:

pnputil installiert dir für alle Benutzer den Treiber. Du könntest also die Installation der Treiber und das Anlegen des Druckers aufteilen:

Grüße!
Mitglied: Ralus67
Ralus67 07.01.2021 um 13:13:42 Uhr
Goto Top
Hallo Mayho33

Leider funktioniert das Sript nicht. Ich habe es folgendermassen implementiert.

Invoke-Command -ComputerName $env:computername -Scriptblock {Cscript C:\Windows\System32\Printing_Admin_Scripts\de-DE\prnport.vbs -a -r IP_192.168.33.53 -h 192.168.33.53 -o raw -n 9100}

Start-Sleep -Seconds 5

$toInvoke = ("/c $($env:computername) rundll32 printui.dll,PrintUIEntry /if /b " + [char]34 + "DYMO LabelWriter 450 Twin Turbo" + [char]34 + " /f $PSScriptRoot\Drivers\DYMO.inf /r IP_192.168.33.53 /m " + [char]34 + "DYMO LabelWriter 450 Twin Turbo" + [char]34)

$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$p = New-Object System.Diagnostics.Process
$pinfo.UseShellExecute = $false
$pinfo.FileName = "cmd.exe"
$pinfo.Arguments = $toInvoke


$p.StartInfo = $pinfo
$p.Start() | Out-Null
Mitglied: mayho33
mayho33 07.01.2021 um 13:18:19 Uhr
Goto Top
Zitat von @Ralus67:
Leider funktioniert das Sript nicht. Ich habe es folgendermassen implementiert.

Sollte ja nur ein Example sein. ;-) face-wink
Mitglied: Ralus67
Ralus67 07.01.2021 aktualisiert um 13:36:10 Uhr
Goto Top
Irgendwo ist hier ein Fehler im Skript

Da wird nichts ausgeführt.


Verb :
Arguments : /c AS01-LAB rundll32 printui.dll,PrintUIEntry /if /b "DYMO LabelWriter 450 Twin Turbo" /f
C:\Temp\Dymo_LabelWriter450_8.3.0.443_001\Deploy\P_ML_x99\Drivers\DYMO.inf /r IP_192.168.33.53 /m "DYMO LabelWriter 450 Twin Turbo"
CreateNoWindow : False
EnvironmentVariables : {Path, PROCESSOR_IDENTIFIER, TEMP, ProgramW6432...}
Environment : {[Path, C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\myNet\;C:\Users\Ralus\AppData\Local\Microsoft\WindowsApps], [PROCESSOR_IDENTIFIER, Intel64 Family 6 Model 94 Stepping 3, GenuineIntel], [TEMP,
C:\Users\Ralus\AppData\Local\Temp], [ProgramW6432, C:\Program Files]...}
RedirectStandardInput : False
RedirectStandardOutput : False
RedirectStandardError : False
StandardErrorEncoding :
StandardOutputEncoding :
UseShellExecute : False
Verbs : {open, runas, runasuser}
UserName :
Password :
PasswordInClearText :
Domain :
LoadUserProfile : False
FileName : cmd.exe
WorkingDirectory :
ErrorDialog : False
ErrorDialogParentHandle : 0
WindowStyle : Normal




PS C:\WINDOWS\system32> echo $p

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- --
0 0 0


PS C:\WINDOWS\system32>
Mitglied: mayho33
mayho33 07.01.2021 um 14:06:35 Uhr
Goto Top
Schau die mal diese CmdLets an:

https://docs.microsoft.com/en-us/powershell/module/printmanagement/add-p ...

https://docs.microsoft.com/en-us/powershell/module/printmanagement/add-p ...

Wenn du also mal den Treiber bereitgestellt hast (als Admin natürlich), dann sollte das Erstellen eines Druckers kein Problem sein.

Etwas Übung muss halt schon sein.

Was genau willst mit...
...bewirken ?

Powershell gibt alles, auch einen simplen String, zuerst mal in einem Object zurück.
Es würde also reichen in der PS einfach nur das zu machen:

Das wirst du aber nicht viel sehen. Hingegen listet $p.Startinfo alle StartParamter

Willst du wissen ob nach der Ausführung alles OK war Kannst du auf das Ende des Processes warten:
und anschließend den ExitCode anschauen:

System.Diagnostics.Process kann System.Diagnostics.ProcessStartInfo übergeben werden. In System.Diagnostics.ProcessStartInfo legst du alle Paramter fest die für dich wichtig sind.

das sind minimum 3:
  • UseShellExecute = $false
  • FileName = die exe die du starten willst, also cmd.exe
  • Arguments = die Argumente die du der Exe übergeben willst

Da cmd.exe mal wissen muss, wie es sich verhalten soll (offen bleiben oder nicht nach Ausführung) => "/c" (beutet nach Ausführung schließen)
du willst das cmd.exe was für dich macht? Dann sag ihr was:

pnpuitil -a -i "pfad zu einer inf-Datei" (pnputil liegt in C:\Windows\system32 und ist fester Bestandteil von W10) pnputil hat auch Argumente die man angeben kann/muss.

Du übergibst also sogar 2 Befehle. Einmal die Exe die gestartet werden soll, die Argumente für dieses Exe und einen Befehl der mit der Exe ausgeführt werden soll (pnputil ....)

Schau dir mal an was pnputil so kann und macht;

Schau dir auch an was cmd.exe so kann und macht;

In dem Beispiel musst du mal den Pfad zu deiner INF anpassen:
Heiß diskutierte Beiträge
question
Welches Anti Spam Gateway verwendet ihr?jojo0411Vor 1 TagFrageExchange Server8 Kommentare

Hallo Leute, Wir verwenden seit Jahren GFI Mailessentials. Ist OK. Aber mir kommt so vor als tut sich dort nicht mehr viel neues. Was verwendet ...

question
White Label Cloud Speicher (EU) gelöst IllusionFACTORYVor 1 TagFrageCloud-Dienste13 Kommentare

Hallo, zusammen, ich möchte unseren Kunden gerne Cloud Speicher anbieten, das soll a) auf uns gebrandet sein und b) in der EU (wegen DSGVO). Kennt ...

question
Lexmark M3150 - Firmware downgrade gesucht gelöst Strahlemann-69Vor 1 TagFrageDrucker und Scanner9 Kommentare

Hallo an alle, ich bekam einen Lexmark M3150 mit 3 Papierfächern + Toner geschenkt. Nun wollte ich ihn leerdrucken und dann entsorgen, da unrentabel. Jetzt ...

question
10Gbit Netzwerkkabel HPE J9287b X242 SFP+ gelöst jedineo2002Vor 17 StundenFrageNetzwerke10 Kommentare

Hallo zusammen, ich hätte hier zwei HPE J9287B SFP+ Kabel zur Verfügung, in der Länge von 15 Metern, was zumindest schon einmal perfekt wäre von ...

question
SQL Daten in Excel gelöst robdoxVor 1 TagFrageMicrosoft Office6 Kommentare

Hallo zusammen und ein schönen Start ins Wochenende! Ich habe vorab eine Frage zu einem bestimmten Vorgehen, was meinerseits noch teils theoretischer Natur ist. Ich ...

question
Windows Server 2012 - LSASS 1000 1015 RebootfrunkyVor 18 StundenFrageWindows Server9 Kommentare

Hallo Zusammen, ich habe einen Windows Server 2012 als Domänen Controller diese Woche neu aufgesetzt. Der Server macht ca. alle 3 Stunden einen Reboot. Die ...

question
Fujitsu TX 2540 M1 - Netzteil Lüfter drehen täglich hoch gelöst CrallyVor 1 TagFrageServer-Hardware5 Kommentare

Hallo zusammen, Ich habe einen Fujitsu TX 2540 M1, auf welchem Proxmox als OS läuft. Jeden Tag um genau 23:00 Uhr drehen die Lüfter der ...

question
Windows Exchange-Server benötige ich eine Domaine?Bella21Vor 8 StundenFrageWindows Server4 Kommentare

Hallo alle zusammen, ich bin neu auf dem Gebiet. Ich habe Exchange Server auf einen Windows Server 2012 installiert. Nach der Installation fertig war, ist ...