Показать полную графическую версию : сканирование ПК на наличие установленных принтеров
Anufriev
03-10-2012, 10:28
Добрый день!
мне в сети необходимо найти у кого установлен принтер с определенным IP адресом, компов порядка 300, ручками искать и по пользователям ходить не вариант:(
хотелось бы что бы скрипт писал в файл "имя ПК" кто залогинен и список принтеров которые у него установлены
p.s. задача от руководства ибо к нему на принтер иногда печатается текст за который он хочет наказать печатающего;)
Molchune
03-10-2012, 12:33
Я так понимаю принтер подключен к компу руководства. Так в логах пишется кто печатал когда печатал и с какого ip печатали.
Anufriev
03-10-2012, 13:52
на этом принтере я не нашел логи:(
IT Shepherd
03-10-2012, 15:08
Anufriev, озвучьте каким образом принтер расшарен, ну можно и модель принтера в придачу
на этом принтере я не нашел логи »
Включите.
Протоколирование успешных событий печати - системная настройка. На серверных платформах "окошек" она включена по умолчанию. На XP включается так:
Папка "Принтеры и факсы" - меню "Файл" - пункт "Свойства сервера" - вкладка "Дополнительные параметры" - "коробочка" "Вести журнал сообщений очереди печати".
На Vista и 7 - не проверял.
Anufriev
04-10-2012, 06:01
принтер HP 1212
он сетевой (к нему все подключаются по IP), у начальника на ПК он не расшарен, поэтому на компе логировать не чего!
на самом принтере логов нет, поэтому и нужно вычислить у кого он установлен
DmitriiV
05-10-2012, 14:56
Anufriev, у вас в организации домен? Если домен, то предлагаю в качестве опорной точки сценарий, решающий описанную задачу для одной станции. Если подобный подход устроит, то можно эту заготовку развивать в нужном направлении.
Dim objWMI, objCollection, objItem
Dim objReg, arrValueNames, arrValueTypes
Dim strComputer, strDomain, strUser, strSID, strList, strTemp
Const HKU = &H80000003
Const strSubKeyName = "\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts"
strComputer = "здесь - имя станции"
If Available(strComputer) Then
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objCollection = objWMI.ExecQuery("SELECT UserName FROM Win32_ComputerSystem")
For Each objItem In objCollection
strTemp = objItem.UserName
If IsNull(strTemp) Then strTemp = vbNullString
Next
If Len(strTemp) > 0 Then
strDomain = Split(strTemp, "\")(0)
strUser = Split(strTemp, "\")(1)
If StrComp(strComputer, strDomain, vbTextCompare) <> 0 Then
Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
Else
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
End If
Set objAccount = objWMI.Get("Win32_UserAccount.Domain='" & strDomain & "',Name='" & strUser & "'")
strSID = objAccount.SID
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
objReg.EnumValues HKU, strSID & strSubKeyName, arrValueNames, arrValueTypes
For i = 0 To UBound(arrValueNames)
If Left(arrValueNames(i), 2) = "\\" Then strList = strList & arrValueNames(i) & vbNewLine
Next
If Len(strList) > 0 Then
WScript.Echo "Станция: " & strComputer & vbNewLine & "Пользователь: " & strTemp & vbNewLine & _
"Подключения к сетевым принтерам: " & vbNewLine & strList
Else
WScript.Echo "Не найдено ни одного подключения к сетевому принтеру."
End If
Else
WScript.Echo "Сеанс не обнаружен."
End If
Else
WScript.Echo "Станция не отвечает."
End If
WScript.Quit 0
'======
Function Available(strName)
Dim objWMI, objItem
Set objWMI = GetObject("winmgmts:").ExecQuery("SELECT StatusCode FROM Win32_PingStatus WHERE Address='" & strName & "'")
For Each objItem In objWMI
If IsNull(objItem.StatusCode) Or objItem.StatusCode <> 0 Then
Available = False
Else
Available = True
End If
Next
Set objItem = Nothing
Set objWMI = Nothing
End Function
Anufriev
08-10-2012, 07:13
да у нас домен, можно было бы политикой запустить скрипт по всем машинкам, и собрать отчет
DmitriiV
08-10-2012, 13:43
... политикой запустить скрипт по всем машинкам, и собрать отчетПример сценария для запуска через GPO при начале сеанса пользователя. Журнал будет создан в папке Application Data профиля пользователя (разумеется, можете указать свой путь, но советую добавить проверку на наличие/доступность этого пути).
Dim objWMI, objWsNet, objAccount
Dim objFS, objFile, strLog
Dim arrValueNames, arrValueTypes
Dim strDomain, strUser, strSID, strList
Const HKU = &H80000003
Const strSubKeyName = "\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts"
strLog = "_LanPrinters.log"
Set objWsNet = CreateObject("WScript.Network")
strComputer = objWsNet.ComputerName
strDomain = objWsNet.UserDomain
strUser = objWsNet.UserName
Set objWsNet = Nothing
On Error Resume Next
Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
If Err.Number = 0 Then
Set objAccount = objWMI.Get("Win32_UserAccount.Domain='" & strDomain & "',Name='" & strUser & "'")
If Err.Number = 0 Then
strSID = objAccount.SID
If Err.Number = 0 Then
Set objAccount = Nothing
Set objWMI = GetObject("winmgmts:\\.\root\default:StdRegProv")
If Err.Number = 0 Then
objWMI.EnumValues HKU, strSID & strSubKeyName, arrValueNames, arrValueTypes
If Err.Number = 0 Then
For i = 0 To UBound(arrValueNames)
If Left(arrValueNames(i), 2) = "\\" Then strList = strList & Mid(arrValueNames(i), 3) & ";"
Next
strLog = CreateObject("Shell.Application").NameSpace(&H1A).Self.Path & "\" & strUser & strLog
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.CreateTextFile(strLog, True)
If Err.Number = 0 Then
If Len(strList) > 0 Then
If Right(strList, 1) = ";" Then strList = Mid(strList, 1, Len(strList) - 1)
objFile.WriteLine strList
End If
objFile.Close
Set objFile = Nothing
Else
Err.Clear
End If
Set objFS = Nothing
Else
Err.Clear
End If
Else
Err.Clear
End If
Else
Err.Clear
End If
Else
Err.Clear
End If
Set objWMI = Nothing
Else
Err.Clear
End If
WScript.Quit 0
Диагностику ошибок, если нужна, добавляйте самостоятельно.
Anufriev
10-10-2012, 07:05
Журнал будет создан в папке Application Data профиля пользователя
все хорошо, а где данная строка, что бы изменить путь?
DmitriiV
10-10-2012, 07:50
CreateObject("Shell.Application").NameSpace(&H1a).Self.Path
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.