Obtener lista de Impresoras de Windows Server
Pregunta
Me gustaría consultar un servidor de Windows que está publicando una serie de impresoras mediante programación y averiguar
- ¿qué impresoras están disponibles en la máquina remota (nombre y descripción) sin necesidad de instalar las impresoras localmente
- el nombre del controlador de la impresora respectivamente
Me gustaría ser capaz de procesar el resultado de algún lenguaje de scripting como AutoIT. ¿Qué opciones tengo?
Solución
Esto debería ayudar (aunque es VBS):
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select printerName, serverName from " _
& " 'LDAP://DC=fabrikam,DC=com' where objectClass='printQueue'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo "Printer Name: " & objRecordSet.Fields("printerName").Value
Wscript.Echo "Server Name: " & objRecordSet.Fields("serverName").Value
objRecordSet.MoveNext
Loop
Más información se puede encontrar en esta página .
Si realmente quieres en AutoIt puede probar esta hilo del foro , que pasa a tener alguna traducción del código de seguridad.
Básicamente si escribe en 'impresoras' en el foro autoit en el campo de búsqueda obtendrá mucha información al respecto. Mucho mejor que yo pegarlo aquí: -)
Como se ha mencionado en el comentario si no tiene AD se debe utilizar para generar código Scriptomatic AutoIt WMI por ejemplo:
; Generated by AutoIt Scriptomatic
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output=""
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PrinterDriver", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$Output = $Output & "Caption: " & $objItem.Caption & @CRLF
$Output = $Output & "ConfigFile: " & $objItem.ConfigFile & @CRLF
$Output = $Output & "CreationClassName: " & $objItem.CreationClassName & @CRLF
$Output = $Output & "DataFile: " & $objItem.DataFile & @CRLF
$Output = $Output & "DefaultDataType: " & $objItem.DefaultDataType & @CRLF
$strDependentFiles = $objItem.DependentFiles(0)
$Output = $Output & "DependentFiles: " & $strDependentFiles & @CRLF
$Output = $Output & "Description: " & $objItem.Description & @CRLF
$Output = $Output & "DriverPath: " & $objItem.DriverPath & @CRLF
$Output = $Output & "FilePath: " & $objItem.FilePath & @CRLF
$Output = $Output & "HelpFile: " & $objItem.HelpFile & @CRLF
$Output = $Output & "InfName: " & $objItem.InfName & @CRLF
$Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
$Output = $Output & "MonitorName: " & $objItem.MonitorName & @CRLF
$Output = $Output & "Name: " & $objItem.Name & @CRLF
$Output = $Output & "OEMUrl: " & $objItem.OEMUrl & @CRLF
$Output = $Output & "Started: " & $objItem.Started & @CRLF
$Output = $Output & "StartMode: " & $objItem.StartMode & @CRLF
$Output = $Output & "Status: " & $objItem.Status & @CRLF
$Output = $Output & "SupportedPlatform: " & $objItem.SupportedPlatform & @CRLF
$Output = $Output & "SystemCreationClassName: " & $objItem.SystemCreationClassName & @CRLF
$Output = $Output & "SystemName: " & $objItem.SystemName & @CRLF
$Output = $Output & "Version: " & $objItem.Version & @CRLF
if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
$Output=""
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_PrinterDriver" )
Endif
Func WMIDateStringToDate($dtmDate)
Return (StringMid($dtmDate, 5, 2) & "/" & _
StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
EndFunc
Hay muchas más clases de WMI para pritners:
Win32_PrinterDriver
Win32_PrinterDriverDll
Win32_PrinterSetting
Win32_PrinterShare
Win32_PrintJob
Win32_Printer
Win32_PrinterConfiguration
Otro ejemplo:
; Generated by AutoIt Scriptomatic
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output=""
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$Output = $Output & "Attributes: " & $objItem.Attributes & @CRLF
$Output = $Output & "Availability: " & $objItem.Availability & @CRLF
$strAvailableJobSheets = $objItem.AvailableJobSheets(0)
$Output = $Output & "AvailableJobSheets: " & $strAvailableJobSheets & @CRLF
$Output = $Output & "AveragePagesPerMinute: " & $objItem.AveragePagesPerMinute & @CRLF
$strCapabilities = $objItem.Capabilities(0)
$Output = $Output & "Capabilities: " & $strCapabilities & @CRLF
$strCapabilityDescriptions = $objItem.CapabilityDescriptions(0)
$Output = $Output & "CapabilityDescriptions: " & $strCapabilityDescriptions & @CRLF
$Output = $Output & "Caption: " & $objItem.Caption & @CRLF
$strCharSetsSupported = $objItem.CharSetsSupported(0)
$Output = $Output & "CharSetsSupported: " & $strCharSetsSupported & @CRLF
$Output = $Output & "Comment: " & $objItem.Comment & @CRLF
$Output = $Output & "ConfigManagerErrorCode: " & $objItem.ConfigManagerErrorCode & @CRLF
$Output = $Output & "ConfigManagerUserConfig: " & $objItem.ConfigManagerUserConfig & @CRLF
$Output = $Output & "CreationClassName: " & $objItem.CreationClassName & @CRLF
$strCurrentCapabilities = $objItem.CurrentCapabilities(0)
$Output = $Output & "CurrentCapabilities: " & $strCurrentCapabilities & @CRLF
$Output = $Output & "CurrentCharSet: " & $objItem.CurrentCharSet & @CRLF
$Output = $Output & "CurrentLanguage: " & $objItem.CurrentLanguage & @CRLF
$Output = $Output & "CurrentMimeType: " & $objItem.CurrentMimeType & @CRLF
$Output = $Output & "CurrentNaturalLanguage: " & $objItem.CurrentNaturalLanguage & @CRLF
$Output = $Output & "CurrentPaperType: " & $objItem.CurrentPaperType & @CRLF
$Output = $Output & "Default: " & $objItem.Default & @CRLF
$strDefaultCapabilities = $objItem.DefaultCapabilities(0)
$Output = $Output & "DefaultCapabilities: " & $strDefaultCapabilities & @CRLF
$Output = $Output & "DefaultCopies: " & $objItem.DefaultCopies & @CRLF
$Output = $Output & "DefaultLanguage: " & $objItem.DefaultLanguage & @CRLF
$Output = $Output & "DefaultMimeType: " & $objItem.DefaultMimeType & @CRLF
$Output = $Output & "DefaultNumberUp: " & $objItem.DefaultNumberUp & @CRLF
$Output = $Output & "DefaultPaperType: " & $objItem.DefaultPaperType & @CRLF
$Output = $Output & "DefaultPriority: " & $objItem.DefaultPriority & @CRLF
$Output = $Output & "Description: " & $objItem.Description & @CRLF
$Output = $Output & "DetectedErrorState: " & $objItem.DetectedErrorState & @CRLF
$Output = $Output & "DeviceID: " & $objItem.DeviceID & @CRLF
$Output = $Output & "Direct: " & $objItem.Direct & @CRLF
$Output = $Output & "DoCompleteFirst: " & $objItem.DoCompleteFirst & @CRLF
$Output = $Output & "DriverName: " & $objItem.DriverName & @CRLF
$Output = $Output & "EnableBIDI: " & $objItem.EnableBIDI & @CRLF
$Output = $Output & "EnableDevQueryPrint: " & $objItem.EnableDevQueryPrint & @CRLF
$Output = $Output & "ErrorCleared: " & $objItem.ErrorCleared & @CRLF
$Output = $Output & "ErrorDescription: " & $objItem.ErrorDescription & @CRLF
$strErrorInformation = $objItem.ErrorInformation(0)
$Output = $Output & "ErrorInformation: " & $strErrorInformation & @CRLF
$Output = $Output & "ExtendedDetectedErrorState: " & $objItem.ExtendedDetectedErrorState & @CRLF
$Output = $Output & "ExtendedPrinterStatus: " & $objItem.ExtendedPrinterStatus & @CRLF
$Output = $Output & "Hidden: " & $objItem.Hidden & @CRLF
$Output = $Output & "HorizontalResolution: " & $objItem.HorizontalResolution & @CRLF
$Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
$Output = $Output & "JobCountSinceLastReset: " & $objItem.JobCountSinceLastReset & @CRLF
$Output = $Output & "KeepPrintedJobs: " & $objItem.KeepPrintedJobs & @CRLF
$strLanguagesSupported = $objItem.LanguagesSupported(0)
$Output = $Output & "LanguagesSupported: " & $strLanguagesSupported & @CRLF
$Output = $Output & "LastErrorCode: " & $objItem.LastErrorCode & @CRLF
$Output = $Output & "Local: " & $objItem.Local & @CRLF
$Output = $Output & "Location: " & $objItem.Location & @CRLF
$Output = $Output & "MarkingTechnology: " & $objItem.MarkingTechnology & @CRLF
$Output = $Output & "MaxCopies: " & $objItem.MaxCopies & @CRLF
$Output = $Output & "MaxNumberUp: " & $objItem.MaxNumberUp & @CRLF
$Output = $Output & "MaxSizeSupported: " & $objItem.MaxSizeSupported & @CRLF
$strMimeTypesSupported = $objItem.MimeTypesSupported(0)
$Output = $Output & "MimeTypesSupported: " & $strMimeTypesSupported & @CRLF
$Output = $Output & "Name: " & $objItem.Name & @CRLF
$strNaturalLanguagesSupported = $objItem.NaturalLanguagesSupported(0)
$Output = $Output & "NaturalLanguagesSupported: " & $strNaturalLanguagesSupported & @CRLF
$Output = $Output & "Network: " & $objItem.Network & @CRLF
$strPaperSizesSupported = $objItem.PaperSizesSupported(0)
$Output = $Output & "PaperSizesSupported: " & $strPaperSizesSupported & @CRLF
$strPaperTypesAvailable = $objItem.PaperTypesAvailable(0)
$Output = $Output & "PaperTypesAvailable: " & $strPaperTypesAvailable & @CRLF
$Output = $Output & "Parameters: " & $objItem.Parameters & @CRLF
$Output = $Output & "PNPDeviceID: " & $objItem.PNPDeviceID & @CRLF
$Output = $Output & "PortName: " & $objItem.PortName & @CRLF
$strPowerManagementCapabilities = $objItem.PowerManagementCapabilities(0)
$Output = $Output & "PowerManagementCapabilities: " & $strPowerManagementCapabilities & @CRLF
$Output = $Output & "PowerManagementSupported: " & $objItem.PowerManagementSupported & @CRLF
$strPrinterPaperNames = $objItem.PrinterPaperNames(0)
$Output = $Output & "PrinterPaperNames: " & $strPrinterPaperNames & @CRLF
$Output = $Output & "PrinterState: " & $objItem.PrinterState & @CRLF
$Output = $Output & "PrinterStatus: " & $objItem.PrinterStatus & @CRLF
$Output = $Output & "PrintJobDataType: " & $objItem.PrintJobDataType & @CRLF
$Output = $Output & "PrintProcessor: " & $objItem.PrintProcessor & @CRLF
$Output = $Output & "Priority: " & $objItem.Priority & @CRLF
$Output = $Output & "Published: " & $objItem.Published & @CRLF
$Output = $Output & "Queued: " & $objItem.Queued & @CRLF
$Output = $Output & "RawOnly: " & $objItem.RawOnly & @CRLF
$Output = $Output & "SeparatorFile: " & $objItem.SeparatorFile & @CRLF
$Output = $Output & "ServerName: " & $objItem.ServerName & @CRLF
$Output = $Output & "Shared: " & $objItem.Shared & @CRLF
$Output = $Output & "ShareName: " & $objItem.ShareName & @CRLF
$Output = $Output & "SpoolEnabled: " & $objItem.SpoolEnabled & @CRLF
$Output = $Output & "StartTime: " & WMIDateStringToDate($objItem.StartTime) & @CRLF
$Output = $Output & "Status: " & $objItem.Status & @CRLF
$Output = $Output & "StatusInfo: " & $objItem.StatusInfo & @CRLF
$Output = $Output & "SystemCreationClassName: " & $objItem.SystemCreationClassName & @CRLF
$Output = $Output & "SystemName: " & $objItem.SystemName & @CRLF
$Output = $Output & "TimeOfLastReset: " & WMIDateStringToDate($objItem.TimeOfLastReset) & @CRLF
$Output = $Output & "UntilTime: " & WMIDateStringToDate($objItem.UntilTime) & @CRLF
$Output = $Output & "VerticalResolution: " & $objItem.VerticalResolution & @CRLF
$Output = $Output & "WorkOffline: " & $objItem.WorkOffline & @CRLF
if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
$Output=""
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_Printer" )
Endif