Я пытаюсь создать сценарий, который позволит просматривать отношения между каждым компьютером и принтером во всем домене из около 1200 машин. Теоретически я ищу сценарий для запуска, чтобы он публиковал всю найденную информацию в текстовом документе, чтобы мы могли использовать его для просмотра, какие компьютеры подключены к каким принтерам (сетевые / локальные).
В настоящее время я использую сценарий (приведенный ниже), который требует от меня ввода IP-адреса или имени компьютера компьютера, чтобы он мог запрашивать этот компьютер и предоставлять текущие отношения с принтером для текущего пользователя, вошедшего в систему.
Я надеюсь изменить этот сценарий с чьей-то помощью, чтобы он запрашивал набор компьютеров на основе текстового файла или CSV.
Const ForAppending = 8
Const ForReading = 1
Dim objTextFile
Dim objWriteFile
Dim objCopyFSO
Dim objWriteFSO
Dim objCrisFSO
Dim StrNextLine
Dim PCNameList
Dim FolderCopyError
Const ForWriting = 2
Const adTypeBinary = 1
Const adTypeText = 2
Const adSaveCreateOverWrite = 2
Const adModeReadWrite = 3
Dim sTitle, WshNetwork, objPrinter, intDrive, intNetLetter
'Tool Bar title
sTitle = "List Printers"
Dim StrComputer
'Textbox which enables the user to enter the IP/PC name of the PC
strComputer = InputBox("Enter IP or name of computer to check for " & _
"printer list (leave blank to check " & _
"local system)." & vbcrlf & vbcrlf & "Remote " & _
"checking only from NT type OS to NT type OS " & _
"with same Admin level UID & PW", sTitle)
'If the textbox is left empty then it will exit the application
If IsEmpty(strComputer) Then WScript.Quit
strComputer = Trim(strComputer)
If strComputer = "" Then strComputer = "."
'Copy the files to each workstation
'Create a new file and rename here to run multiple instances of this script.
Set WshNetwork = CreateObject("WScript.Network")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each objItem in colItems
UserName = objItem.UserName
arrUserName = Split(UserName, "\", -1, 1)
varUserName = arrUserName(1)
Next
filOutput = varUserName & "_printers.txt"
If objFSO.FileExists(filOutput) Then
objFSO.DeleteFile(filOutput)
End If
Set objOutputFile = objFSO.OpenTextFile (filOutput, ForAppending, True)
For Each objPrinter in colInstalledPrinters
strTest = Left(objPrinter.Name, 2)
objOutputFile.WriteLine(objPrinter.Name)
Next
'objOutputFile.Close
'added
Set objPrinter = WshNetwork.EnumPrinterConnections
'Set objOutputFile = objFSO.OpenTextFile (filOutput, ForAppending, True)
If objPrinter.Count = 0 Then
WScript.Echo "No Printers Mapped "
else
For intDrive = 0 To (objPrinter.Count -1) Step 2
intNetLetter = IntNetLetter +1
printer = "UNC Path " & objPrinter.Item(intDrive) & " = " & objPrinter.Item(intDrive +1) & " Printer : " & intDrive
objOutputFile.WriteLine(printer)
Next
end if
objOutputFile.Close
'added
varOpen = MsgBox("Do you want to view the printers?",36,"View File?")
If varOpen = vbYes Then
varCommand = "notepad " & filOutput
WshShell.Run varCommand,1,False
End If
Wscript.Sleep 1500
MsgBox "Printer mappings have been stored in '" & filOutput & "'.", 64, "Script Complete"
Wscript.Quit
Это исходная ссылка на скрипт: http://community.spiceworks.com/scripts/show/1145-list-printers-vbs-update
Если у кого-то есть опыт выполнения чего-то подобного или был в ситуации, когда вам нужно было собрать данные о взаимосвязи между принтером и ПК, я был бы благодарен за ваш вклад в отношении того, как лучше всего бороться с этой проблемой.