Назад | Перейти на главную страницу

Сбор информации о взаимосвязи между ПК и принтером во всем домене с помощью сценария

Я пытаюсь создать сценарий, который позволит просматривать отношения между каждым компьютером и принтером во всем домене из около 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

Если у кого-то есть опыт выполнения чего-то подобного или был в ситуации, когда вам нужно было собрать данные о взаимосвязи между принтером и ПК, я был бы благодарен за ваш вклад в отношении того, как лучше всего бороться с этой проблемой.