2010-02-10 2 views
0

j'aimerais interroger un serveur Windows qui publie une série d'imprimantes programatically et découvrezobtenir la liste des imprimantes de Windows Server

  • ce que les imprimantes sont disponibles sur la machine distante (nom et description) sans l'installation des imprimantes localement
  • le nom du pilote d'imprimante respectivement

Je voudrais être en mesure de traiter le résultat dans un langage de script comme AutoIT. Quelles options ai-je?

Répondre

2

Cela devrait aider (bien qu'il soit 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 

Plus d'informations vous pouvez trouver sur ce page.

Si vous le voulez vraiment dans AutoIt, vous pouvez essayer ce forum thread qui se passe d'avoir une traduction du code ci-dessus. Fondamentalement, si vous tapez «imprimantes» sur le forum Autoit dans le champ de recherche, vous obtiendrez beaucoup d'informations à ce sujet. Il vaut bien mieux puis me coller ici :-)

Comme mentionné dans un commentaire si vous avez pas AD, vous devez utiliser Scriptomatic pour générer du code AutoIt WMI par exemple:

; 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 

Il y a beaucoup de classes dans WMI pour pritners :

Win32_PrinterDriver

Win32_PrinterDriverDll

Win32_PrinterSetting

Win32_PrinterShare

Win32_PrintJob

Win32_Printer

Win32_PrinterConfiguration

Un autre exemple:

; 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 
+0

Je ne suis pas sûr que les imprimantes sont publiées dans AD (semble être une condition préalable), mais je vais essayer. – vwegert

+0

Si elles ne sont pas publiées dans AD vous pouvez le faire en utilisant WMI, sur le forum AutoIt v3 il y a l'outil Scriptomatic (traduction de Microsoft Scriptomatic qui produit VBS) qui produit le code AutoIt. Vous avez juste besoin de trouver une classe pour lister les imprimantes. – MadBoy

Questions connexes