praxmo
Goto Top

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:
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

Content-ID: 456943

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

Ausgedruckt am: 24.11.2024 um 05:11 Uhr

139920
Lösung 139920 29.05.2019 aktualisiert um 16:09:46 Uhr
Goto Top
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()
}
praxmo
praxmo 31.05.2019 um 11:11:38 Uhr
Goto Top
Hallo Shellschrubber,

habe beim Script mal von einem Farbdrucker den Namen eingetragen und es als Administrator ausgeführt auf einem der Terminalserver, leider ändert es nichts.

Gruß
139920
139920 31.05.2019 um 13:15:31 Uhr
Goto Top
Hier schon.