Setting advanced print settings

This topic contains 3 replies, has 3 voices, and was last updated by Profile photo of Brian B Brian B 8 months ago.

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #34275
    Profile photo of Tommy Larsen
    Tommy Larsen
    Participant

    Hi all. I have an interesting thing I would like to do:
    Change print settings on 5000 queue's with a one-liner, ok perhaps two...
    Here is what I can extract from the print settings from one of the queue's :
    :
    $queue = "printerqueue_name"
    [xml]$printTicket = Get-PrintConfiguration -PrinterName $queue | Select-Object -ExpandProperty PrintTicketXML
    ($printTicket.PrintTicket.ChildNodes | where name -Like psk:jobinputbin).LastChild.name = "ns0000:auto"

    Set-PrintConfiguration -PrinterName $queue -PrintTicketXml $printTicket

    The Idea behind this script is that I would like to change the inputbin from "ns0000:Cassette2" to "ns0000:Auto" – or whatever Cassette I would like to have for this queue.
    But I get an error I think is quite generic :

    Set-PrintConfiguration : Invalid at the top level of the document.
    At line:6 char:1
    + Set-PrintConfiguration -PrinterName $pname -PrintTicketXml $printTicket
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (MSFT_PrinterConfiguration:ROOT/StandardCi...erConfiguration) [Set-PrintConfiguration], CimException
    + FullyQualifiedErrorId : HRESULT 0x80070057,Set-PrintConfiguration

    It seems that it should be possible to edit the xml settings, and there is a lot of settings you can list out.
    And if you change the Cassette setting in "advanced settings" on the queue, these changes are reflected immediately to the xml settings.
    There are 2 different type of settings : PrintTicketXml and PrintCapabilitiesXml
    Save the xml config to look at it in a browser :

    $printTicket.Save("C:\printTicket.xml")

    Anyone with an Idea of how to do this?

    #34486
    Profile photo of Joseph Monarch
    Joseph Monarch
    Participant

    This would be a lot simpler if you had a print server. You can set the default setting for the printer there and it would force the clients to be set to those settings.

    #34552
    Profile photo of Tommy Larsen
    Tommy Larsen
    Participant

    I didn't state that, but we have 4 print servers with all these queue's.
    My problem is that when i change print driver, also settings are changed, for example that Cassette1 and 3 are disabled for a print queue that is set to print from Cassette2.
    There is also a variety of plotters, A3 printers and a heavenly mix of all kinds.
    Imagine going through 5000 queue's manually and set these things.. And to make it more fun, settings aren't named the same from one driver version to the other.. But that is a matter of logic in script. This is also useful for those migrating from ex windows2003 x32 to server2012 x64.. I know there are data that can be modified in registry, but not sure if it is the best way to configure queues. So my question is this : Is there a .Net or C++ way to configure printqueue's in Powershell?

    #34567
    Profile photo of Brian B
    Brian B
    Participant

    What operating system are your print servers? 2008 R2? 2012 R2? 2003? (please don't say yes to this haha)

    I've done printer security on queues before, was thinking there may be a way to do what you're asking.... but there might not be.

    That being said... I'm using 2012 R2. There is a System.Printing type you can use to get quite a bit of detail. I assume with some testing you may be able to get this to work by setting the 'InputBin' to something other than 'AutoSelect' (actually a value of 1) from what I can see.

    Add-Type -AssemblyName System.Printing
    $permissions = [System.Printing.PrintSystemDesiredAccess]::AdministrateServer
    $queueperms = [System.Printing.PrintSystemDesiredAccess]::AdministratePrinter
    $server = new-object System.Printing.PrintServer -argumentList $permissions
    $queues = $server.GetPrintQueues(@([System.Printing.EnumeratedPrintQueueTypes]::Shared))
    
    ###  I then looked for one specific queue called LB_HP8150 as it's all I had on my test box.
    
    $HPPrinter = ($queues | where {$_.name -eq "LB_HP8150"})
    $HPPrinter.PropertiesCollection.UserPrintTicket.value.inputbin.value__
    
    ### The above line returns a value of 1.   My understanding is that the InputBin is the input where blank paper is pulled from.   My printer is set to AutoSelect.  
    

    i have to leave so I haven't actually tried SETTING the value.. but thought maybe this would help. Let me know

    Brian

Viewing 4 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic.