Help with wmi.put()

Welcome Forums General PowerShell Q&A Help with wmi.put()

This topic contains 3 replies, has 2 voices, and was last updated by

 
Participant
2 years, 4 months ago.

  • Author
    Posts
  • #46005

    Participant
    Points: 0
    Rank: Member

    Hey guys
    im total newbie and got this from the web; struggeling now with put(). It says "Connection refused". WMI installed;DCOM activated..

    ####################################################
    # Change these values to the appropriate values in your environment
    $ComputerName = "windows01"
    $PrinterIP = “11.10.10.10”
    $PrinterPort = “9101”
    $PrinterPortName = “IP_” + $PrinterIP
    $DriverName = “Sharp MX-3100N – scriptinstalled”
    $DriverPath = “\\localhost\share\MX3100\German\PCL6\64bit”
    $DriverInf = “\\localhost\share\MX3100\German\PCL6\64bit\sn0emdeu.inf”
    $PrinterCaption = “SWLaser2”
    ####################################################

    ### ComputerList Option 1 ###
    $ComputerList = @(“windows01”)

    ### ComputerList Option 2 ###
    # $ComputerList = @()
    # Import-Csv “C:\Temp\ComputersThatNeedPrinters.csv” | `
    # % {$ComputerList += $_.Computer}

    Function CreatePrinterPort {
    param ($PrinterIP, $PrinterPort, $PrinterPortName, $ComputerName)
    $wmi = [wmiclass]”\\$ComputerName\root\cimv2:win32_tcpipPrinterPort”
    $wmi.psbase.scope.options.enablePrivileges = $true
    $Port = $wmi.createInstance()
    $Port.name = $PrinterPortName
    $Port.hostAddress = $PrinterIP
    $Port.portNumber = $PrinterPort
    $Port.SNMPEnabled = $false
    $Port.Protocol = 1
    $Port.put()
    }

    Function InstallPrinterDriver {
    Param ($DriverName, $DriverPath, $DriverInf, $ComputerName)
    $wmi = [wmiclass]”\\$ComputerName\Root\cimv2:Win32_PrinterDriver”
    $wmi.psbase.scope.options.enablePrivileges = $true
    $wmi.psbase.Scope.Options.Impersonation = `
    [System.Management.ImpersonationLevel]::Impersonate
    $Driver = $wmi.CreateInstance()
    $Driver.Name = $DriverName
    $Driver.DriverPath = $DriverPath
    $Driver.InfName = $DriverInf
    $wmi.AddPrinterDriver($Driver)
    $wmi.Put()
    }

    Function CreatePrinter {
    param ($PrinterCaption, $PrinterPortName, $DriverName, $ComputerName)
    $wmi = ([WMIClass]”\\$ComputerName\Root\cimv2:Win32_Printer”)
    $Printer = $wmi.CreateInstance()
    $Printer.Caption = $PrinterCaption
    $Printer.DriverName = $DriverName
    $Printer.PortName = $PrinterPortName
    $Printer.DeviceID = $PrinterCaption
    $Printer.Put()
    }

    foreach ($computer in $ComputerList) {
    CreatePrinterPort -PrinterIP $PrinterIP -PrinterPort $PrinterPort `
    -PrinterPortName $PrinterPortName -ComputerName $computer
    InstallPrinterDriver -DriverName $DriverName -DriverPath `
    $DriverPath -DriverInf $DriverInf -ComputerName $computer
    CreatePrinter -PrinterPortName $PrinterPortName -DriverName `
    $DriverName -PrinterCaption $PrinterCaption -ComputerName $computer
    }
    ####################################################

    Thanks!

    edit:

    [otherLANG]Ausnahme beim Aufrufen von "Put" mit 0 Argument(en): "Allgemeiner Fehler "[/otherLANG]
    In C:\Users\windows\Desktop\addprinter.ps1:57 Zeichen:1
    + $Printer.Put()
    + ~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

  • #46034

    Participant
    Points: 0
    Rank: Member

    ensure that you are able to connect to wmi as that is what the error is indicating and there is no error logic to address any failures.
    Try this and see if it succeeds or fails

    gwmi win32_Printer -ComputerName Server1
  • #46409

    Participant
    Points: 0
    Rank: Member

    Thank you for your answer Jonathan! The connection to wmi works, it shows me a list with my printers. Any ideas?

  • #46452

    Participant
    Points: 0
    Rank: Member

    The next step is to add some basic error handling logic to try and narrow down the issue.
    This breaks your functions into two try groups to handle the initial connection to the remote system and then the code that uses the connection. Based on the error returned you will know which function is having the issue and which code block to look at.

    Function CreatePrinterPort {
    param ($PrinterIP, $PrinterPort, $PrinterPortName, $ComputerName)
    Try{
        $wmi = [wmiclass]"\\$ComputerName\root\cimv2:win32_tcpipPrinterPort"
        $wmi.psbase.scope.options.enablePrivileges = $true
    }Catch{Throw "CreatePrinterPort Failed to Connect to $ComputerName"}
    Try{
        $Port = $wmi.createInstance()
        $Port.name = $PrinterPortName
        $Port.hostAddress = $PrinterIP
        $Port.portNumber = $PrinterPort
        $Port.SNMPEnabled = $false
        $Port.Protocol = 1
        $Port.put()
    }Catch{ Throw "CreatePrinterPort Failed to write the changes to wmi"} 
    }
    
    Function InstallPrinterDriver {
    Param ($DriverName, $DriverPath, $DriverInf, $ComputerName)
    Try{
        $wmi = [wmiclass]”\\$ComputerName\Root\cimv2:Win32_PrinterDriver”
        $wmi.psbase.scope.options.enablePrivileges = $true
        $wmi.psbase.Scope.Options.Impersonation = [System.Management.ImpersonationLevel]::Impersonate
    }Catch{Throw "InstallPrinterDriver Failed to Connect to $ComputerName"}
    Try{
        $Driver = $wmi.CreateInstance()
        $Driver.Name = $DriverName
        $Driver.DriverPath = $DriverPath
        $Driver.InfName = $DriverInf
        $wmi.AddPrinterDriver($Driver)
        $wmi.Put()
    }Catch{Throw "InstallPrinterDriver Failed to write the changes to wmi"}
    }
    
    Function CreatePrinter {
    param ($PrinterCaption, $PrinterPortName, $DriverName, $ComputerName)
    Try{
        $wmi = ([WMIClass]”\\$ComputerName\Root\cimv2:Win32_Printer”)
    }Catch{Throw "CreatePrinter Failed to Connect to $ComputerName"}
    Try{
        $Printer = $wmi.CreateInstance()
        $Printer.Caption = $PrinterCaption
        $Printer.DriverName = $DriverName
        $Printer.PortName = $PrinterPortName
        $Printer.DeviceID = $PrinterCaption
        $Printer.Put()
    }Catch{Throw "CreatePrinter Failed to write the changes to wmi"}
    }
    

The topic ‘Help with wmi.put()’ is closed to new replies.