Druckverteilung über Powershell - Probleme
Hallo zusammen,
ich arbeite noch daran, die von einem Dienstleister damals zusammengeschusterte Powershell-Druckverteilung etwas anzupassen und stoße dabei leider auf Probleme.
Setup wie folgt:
Druckserver Win2012 R2
Terminalserverfarm Win2012 R2
Das bisherige Script funktioniert so:
1. Jeden Morgen via Aufgabenplanung wird auf jedem Terminalserver folgendes ".cmd"-Script ausgeführt:
Die ausgeführten Powershell-Scripte sehen so aus:
"Adminprinter.ps1":
Die ArcPrinter-Datei sieht ähnlich aus, nur der ".csv"-Pfad ist hierbei anders.
Die besagte ".csv" sieht so aus:
Der Nutzer hat dann via GPO ein Logon-Script zugewiesen bekommen, der aus den Nachts hinzugefügten Druckern den Standarddrucker setzt:
Durch das Entfernen der freigegebenen Drucker musste ich nur den FreePDF-Drucker freigeben, damit dieser nicht vom Powershell-Script entfernt wird.
Jedoch stehe ich nun vor einem neuen Problem: Ich möchte einigen Farbdruckern den S/W-Druck als Standard setzen, jedoch übernimmt er dies nicht vom Druckserver. Was wäre hier der klügste Weg?
Viele Grüße
praxmo
ich arbeite noch daran, die von einem Dienstleister damals zusammengeschusterte Powershell-Druckverteilung etwas anzupassen und stoße dabei leider auf Probleme.
Setup wie folgt:
Druckserver Win2012 R2
Terminalserverfarm Win2012 R2
Das bisherige Script funktioniert so:
1. Jeden Morgen via Aufgabenplanung wird auf jedem Terminalserver folgendes ".cmd"-Script ausgeführt:
Powershell.exe -executionpolicy Unrestricted -File \\XXX\NETLOGON\Drucker\Admin\AdminPrinter.ps1
Powershell.exe -executionpolicy Unrestricted -File \\XXX\NETLOGON\Drucker\Admin\ArcPrinter.ps1
Die ausgeführten Powershell-Scripte sehen so aus:
"Adminprinter.ps1":
$csvPath = "\\XXX\NETLOGON\Drucker\Admin\Printers.csv"
$userdomain = $env:UserDomain
$username = $env:UserName
write-host "current User: " $username
write-host "current Domain: " $userdomain
# Alle freigegebenen (nicht Netzwerkdrucker!) löschen
Get-Printer | where{$_.Shared -eq $False} | Remove-Printer
$csvContent = import-csv $csvPath -Delimiter ";" | Where-Object {$_.username -eq $username -and $_.domain -eq $userdomain }
foreach ($content in $csvContent)
{
Write-Host "CSV domain: " $content.("domain")
Write-Host "CSV username: " $content.("username")
Write-Host "CSV printserver: " $content.("printserver")
Write-Host "CSV printers: " $content.("printer")
Write-Host "CSV driver: " $content.("driver")
Write-Host "CSV default: " $content.("default")
# Netzwerkdrucker setzen
$PrinterName = "\\" + $content.("printserver") + "\" + $content.("printer")
$PrinterPorts = Get-PrinterPort | Where-Object {$_.Name -eq $PrinterName}
if(!$PrinterPorts)
{
Write-Host $PrinterPort.Name " noch nicht vorhanden"
add-printerport -name $PrinterName
}
Remove-Printer -name $content.("printer")
add-printer -name $PrinterName -drivername $content.("driver") -port $PrinterName
#add-printer -name $PrinterName -drivername $content.("driver")
#(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection($PrinterName)
if($content.("default") -eq 1)
{
Write-Host "Standard Drucker wird gesetzt:" $content.("printer")
(New-Object -ComObject WScript.Network).SetDefaultPrinter($content.("printer"))
}
}
Die ArcPrinter-Datei sieht ähnlich aus, nur der ".csv"-Pfad ist hierbei anders.
Die besagte ".csv" sieht so aus:
domain;username;printserver;printer;default;driver
hierdomänenname;administrator;hieripdesdruckservers;hierderdruckername;0;treibername
Der Nutzer hat dann via GPO ein Logon-Script zugewiesen bekommen, der aus den Nachts hinzugefügten Druckern den Standarddrucker setzt:
$csvPath = "\\XXX\NETLOGON\Drucker\Printers.csv"
$userdomain = $env:UserDomain
$username = $env:UserName
write-host "current User: " $username
write-host "current Domain: " $userdomain
$csvContent = import-csv $csvPath -Delimiter ";" | Where-Object {$_.username -eq $username -and $_.domain -eq $userdomain }
foreach ($content in $csvContent)
{
Write-Host "CSV domain: " $content.("domain")
Write-Host "CSV username: " $content.("username")
Write-Host "CSV printserver: " $content.("printserver")
Write-Host "CSV printers: " $content.("printer")
Write-Host "CSV driver: " $content.("driver")
Write-Host "CSV default: " $content.("default")
if($content.("default") -eq 1)
{
Write-Host "Standard Drucker wird gesetzt:" $content.("printer")
(New-Object -ComObject WScript.Network).SetDefaultPrinter($content.("printer"))
}
}
Durch das Entfernen der freigegebenen Drucker musste ich nur den FreePDF-Drucker freigeben, damit dieser nicht vom Powershell-Script entfernt wird.
Jedoch stehe ich nun vor einem neuen Problem: Ich möchte einigen Farbdruckern den S/W-Druck als Standard setzen, jedoch übernimmt er dies nicht vom Druckserver. Was wäre hier der klügste Weg?
Viele Grüße
praxmo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 456943
Url: https://administrator.de/contentid/456943
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
3 Kommentare
Neuester Kommentar
Ich möchte einigen Farbdruckern den S/W-Druck als Standard setzen
Kann man auch über die Powershell machen:# Druckername dessen Print-Servereinstellungen geändert werden sollen
$printerName = "HP Laserjet 1320"
Add-Type -AssemblyName System.Printing
$adminServer = [System.Printing.PrintSystemDesiredAccess]::AdministrateServer
$adminPrinter = [System.Printing.PrintSystemDesiredAccess]::AdministratePrinter
$server = new-object System.Printing.LocalPrintServer $adminServer
$queues = $server.GetPrintQueues() | ?{$_.Name -eq $printerName }
foreach($q in $queues){
$objPrinter = new-object System.Printing.PrintQueue -argumentList $server,$q.Name,$adminPrinter
# >>>>>>>>>>>>>>
$objPrinter.DefaultPrintTicket.OutputColor = [System.Printing.OutputColor]::Grayscale
# <<<<<<<<<<<<<<
$objPrinter.Commit()
}
Hier schon.