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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top