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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 638569
Url: https://administrator.de/contentid/638569
Ausgedruckt am: 19.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
Zitat von @Ralus67:
Hallo Community
Ich versuche über Powershell einen Drucker zu erstellen. Leider wird das Druckerobjekt nicht erstellt.
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:
$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
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:
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$p = New-Object System.Diagnostics.Process
$pinfo.UseShellExecute = $false
$pinfo.FileName = "cmd.exe"
$pinfo.Arguments = "/c pnputil -i -a " + [char]34 + "meinPfad\*.inf" + [char]34
$p.StartInfo = $pinfo
$p.Start() | Out-Null
Sollte ja nur ein Example sein.
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:
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:
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...
echo $p
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:
$p
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:
$p.WaitForExit()
$p.ExitCode()
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;
pnputil /?
Schau dir auch an was cmd.exe so kann und macht;
cmd /?
In dem Beispiel musst du mal den Pfad zu deiner INF anpassen:
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$p = New-Object System.Diagnostics.Process
$pinfo.UseShellExecute = $false
$pinfo.FileName = "cmd.exe"
$pinfo.Arguments = "/c pnputil -i -a " + [char]34 + "meinPfad\*.inf" + [char]34
$p.StartInfo = $pinfo
$p.Start() | Out-Null