2010-02-10 19 views
0

我想查询被编程发布了一组打印机的Windows服务器,并找出从Windows Server获取的打印机列表

  • 什么可用的打印机远程计算机(名称和说明),而上分别本地
  • 安装打印机的打印机驱动程序的名称

我希望能够处理结果在一些脚本语言一样的AutoIt。我有哪些选项?

回答

2

这应有助于(虽然它的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 

,你可以找到关于此page更多信息。

如果你真的想在AutoIt中试试这个forum thread,这恰好有一些上面的代码翻译。

基本上,如果您在搜索字段的autoit论坛中键入“打印机”,您将获得大量有关它的信息。远东更好,然后我在这里把它粘贴:-)

正如在评论中提及了,如果你有没有广告,你应该使用的Scriptomatic生成例如AutoIt的WMI代码:

; 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 

有一个在WMI很多类pritners :

Win32_PrinterDriver

Win32_PrinterDriverDll

Win32_PrinterSetting

Win32_PrinterShare

Win32_PrintJob

Win32_Printer

Win32_PrinterConfiguration

又如:

; 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

我不知道打印机是否发布到AD(似乎是一个先决条件),但我会试一试。 – vwegert 2010-02-14 08:14:17

+0

如果它们未在AD中发布,则可以使用WMI在AutoIt v3论坛上制作AutoIt代码的Scriptomatic工具(生成VBS的Microsoft Scriptomatic的翻译)。你只需要找到类列出打印机。 – MadBoy 2010-02-14 08:33:26