powershell - Issues automating printer driver update (printer settings) and printer preferences in Win7, using a PS,cmd,vbs,etc script? -


wmi can it, have issue, pcs on, logged off. if try run:

wmic /node:%strip% printer deviceid="lp1" set drivername="lexmark universal v2" 

it fails message "generic failure". rdp in , run same command end, , works. powershell version using older, not have of printer cmdlets, , updating ps out of question. there way remotely log in, without having rdp in? via ps, cmd, psexec, etc?

the other avenue i've taken using regedit, i'm hitting hicups that, namely cannot figure out copy. in regedit, can change drivername , setting enable duplex , tray2 (in printer settings), cannot figure how change settings in printer preferences printing double sided , doing along long edge.

what did figure out change, did find on printer name in regedit data value , exported keys before changing settings. exported again after changing settings. used fc /c /a /u before.reg after.reg changes. chopped .reg include changed values. running .reg seems change everything, print both sides, along long edge settings. lexmark printer, wondering if maybe preferences stored elsewhere.

this date ps1 script. i've commented out lines tried different ways of doing things:

$cred = get-credential $str = read-host "please select site id [###] " $pc = read-host "please select pc number [##] "  clear-host $pcnm = "$str-ccpc-$pc"  function test-psremoting {     try     {         $erroractionpreference = "stop"         $result = invoke-command -computername $pcnm { 1 }     }     catch     {         write-verbose $_         return $false     }      if($result -ne 1)     {         write-verbose "remoting $pcnm returned unexpected result."         return $false     }      $true    }   if(!(test-psremoting)){     psexec \\$pcnm powershell enable-psremoting -force 2>&1 >nul     clear-host     write-host "enabled psremoting" }else{write-host "psremoting enabled"}  invoke-command -computername $pcnm -credential $cred -scriptblock {     #$lp1 = get-wmiobject -query "select * win32_printer deviceid='lp1'"     $lp1 = get-wmiobject win32_printer | ?{$_.name -eq "lp1"}     $lp1.scope.options.enableprivileges = $true     $lp1.drivername = "lexmark universal v2"     $lp1r = $lp1.put()     #$lp2 = get-wmiobject -query "select * win32_printer deviceid='lp2'"     $lp2 = get-wmiobject win32_printer | ?{$_.name -eq "lp2"}     $lp2.scope.options.enableprivileges = $true     $lp2.drivername = "lexmark universal v2"     $lp2r = $lp2.put() }  #$lp1 = get-wmiobject -impersonation delegate -authentication call -credential $cred -computername $pcnm -query "select * win32_printer deviceid='lp1'" #$lp1.drivername = "lexmark universal v2" #$lp1.put() 

no matter way try it, invoke-command, or get-wmiobject, get:

exception calling "put" "0" argument(s): "generic failure "     + categoryinfo          : notspecified: (:) [], methodinvocationexception     + fullyqualifiederrorid : dotnetmethodexception     + pscomputername        : 150-ccpc-02 

this doesn't particularly answer actual question solution how same thing thought give threw update printer properties. have not cleaned @ porting create printer function.

function set-ssprinter {  param(     [parameter(mandatory=$true,         valuefrompipeline=$true,         valuefrompipelinebypropertyname=$true)]     [validatenotnullorempty()]     [string]$computername,     [parameter(mandatory=$true)]     [validatenotnullorempty()]     [string]$name,     [string]$portname,     [string]$drivername,     [string]$comment,     [string]$location,     [bool]$shared,     [string]$sharename = $name,     [string]$permissionsddl,     [string]$printprocessor,     [string]$datatype,     [bool]$rawonly     )  try {     $modprinter = get-wmiobject win32_printer -computername $computername | ?{$_.name -eq $name}     $modprinter.scope.options.enableprivileges = $true          if($drivername) {             $modprinter.drivername = $drivername         }         if($portname) {             $modprinter.portname = $portname         }         if($shared) {             $modprinter.shared = $shared         }         if($sharename) {             $modprinter.sharename = $sharename         }         if($location) {             $modprinter.location = $location         }         if($comment) {             $modprinter.comment = $comment         }         if($name) {             $modprinter.deviceid = $name         }         if($printprocessor) {             $modprinter.printprocessor = $printprocessor            }         if($datatype) {             $modprinter.printjobdatatype = $datatype         }         if($rawonly) {             $modprinter.rawonly = $rawonly              }          $result = $modprinter.put()          if($permissionsddl) {             $modprinter.setsecuritydescriptor($objhelper.sddltowin32sd($permissionsddl).descriptor) | out-null         }         $("update complete: " + $name)     } catch {         $("update failed: " + $name)         write-warning $_.exception.message          $error.clear()     }  } 

unfortunately use printer name figure out device modify on remote machine. executing credentials powershell session have open must have admin rights on remote machine. if necessary runas different user on powershell.exe

example usage:

set-ssprinter -computername "10.210.20.100" -name "testprinter" -drivername "lexmark universal v2" 

Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -