Автоматическое подключение принтеров
Модератор: Модераторы
Сообщений: 33
• Страница 3 из 4 • 1, 2, 3, 4
Вопрос к создателям скрипта:
А почему нельзя сделать подключение принтера к пользователю если их размещение совпадает??? Вроде это будет более правильно.
Вот например у меня порядка 30 сетевых принтеров. Получается что их все необходимо описывать в этом скрипье???
Может мое предложение более логичное. Пример реализции такого скрипта:
'Скрипт подключения принтеров на рабочих станциях
'Версия: 20050803 1728 alfa (проходит тестирование)
'ищет все опубликованные принтеры в домене и присоединяет те у которых поле location либо совпадает с компьютером либо принтер на уровень выше
'для работы скрипта необходимо
' - заполнить поле Location у принтеров
' - для OU в котором находится компьютер назначить месторасположение в Computer Configuration/Administrative Templates/Printers/Computer Location
' пример поля Локеишн: Офис/5-й этаж/505 кабинет - для компьютера или принтера в кабинете 505. Офис/5-й этаж - для общего принтера на пятом этаже
'настройка: заменить строку "DC=intranet,DC=domain,DC=local" на соответствующую вашему домену.
'
'© cjnovi at gmail dot com (баги, идеи, пожелания сюда)
On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
Set objNetwork = CreateObject("WScript.Network")
Private Function IsLocation( computerLocation, printerLocation)
printerLocation = trim(lCase(printerLocation))
computerLocation = trim(lCase(computerLocation))
If Not len(printerLocation) And Not (computerLocation = "terminal") Then
pL = printerLocation
cL = computerLocation
If (pL = cL) Then IsLocation = True
a = False
Do Until a
cL = mid(cL,InStr(cL,"/")+1,len(cL)-InStr(cL,"/")+1)
if (InStr(cL,"/") = 0) Then a = True
Loop
cL = left(computerLocation,len(computerLocation)-len(cL)-1)
if (pL = cL) Then IsLocation = True
End If
End Function
strComputer = "."
'get Computer Location
const HKEY_LOCAL_MACHINE = &H80000002
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Policies\Microsoft\Windows NT\Printers"
strValueName = "PhysicalLocation"
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,computerLocation
'delete all connected network printers
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer")
For Each objPrinter in colInstalledPrinters
If (left(objPrinter.Name,2) = "\\") Then objNetwork.RemovePrinterConnection objPrinter.Name ' objPrinter.serverName & "\" & objPrinter.shareName
'if ((left(objPrinter.Name,2) = "\\") And Not (IsLocation(computerLocation,objPrinter.Location))) then objNetwork.RemovePrinterConnection objPrinter.Name
Next
'enumerate AD printers
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 serverName, Location, UNCName FROM " _
& " 'LDAP://OU=Domain Controllers,DC=intranet,DC=domain,DC=local' WHERE objectClass='printQueue'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
printerLocation = objRecordSet.Fields("Location").Value
printerShare = objRecordSet.Fields("UNCName").Value
if IsLocation(computerLocation,printerLocation) Then objNetwork.AddWindowsPrinterConnection printerShare
objRecordSet.MoveNext
Loop
'enumerate connected printers and choose default
'if (printerLocation = computerLocation) Then objNetwork.SetDefaultPrinter printerShare
скрипт взят с сайта www.sysadmins.ru
на работоспособность пока не проверял. Но на первыйвзгляд - работать должно.
А почему нельзя сделать подключение принтера к пользователю если их размещение совпадает??? Вроде это будет более правильно.
Вот например у меня порядка 30 сетевых принтеров. Получается что их все необходимо описывать в этом скрипье???
Может мое предложение более логичное. Пример реализции такого скрипта:
'Скрипт подключения принтеров на рабочих станциях
'Версия: 20050803 1728 alfa (проходит тестирование)
'ищет все опубликованные принтеры в домене и присоединяет те у которых поле location либо совпадает с компьютером либо принтер на уровень выше
'для работы скрипта необходимо
' - заполнить поле Location у принтеров
' - для OU в котором находится компьютер назначить месторасположение в Computer Configuration/Administrative Templates/Printers/Computer Location
' пример поля Локеишн: Офис/5-й этаж/505 кабинет - для компьютера или принтера в кабинете 505. Офис/5-й этаж - для общего принтера на пятом этаже
'настройка: заменить строку "DC=intranet,DC=domain,DC=local" на соответствующую вашему домену.
'
'© cjnovi at gmail dot com (баги, идеи, пожелания сюда)
On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
Set objNetwork = CreateObject("WScript.Network")
Private Function IsLocation( computerLocation, printerLocation)
printerLocation = trim(lCase(printerLocation))
computerLocation = trim(lCase(computerLocation))
If Not len(printerLocation) And Not (computerLocation = "terminal") Then
pL = printerLocation
cL = computerLocation
If (pL = cL) Then IsLocation = True
a = False
Do Until a
cL = mid(cL,InStr(cL,"/")+1,len(cL)-InStr(cL,"/")+1)
if (InStr(cL,"/") = 0) Then a = True
Loop
cL = left(computerLocation,len(computerLocation)-len(cL)-1)
if (pL = cL) Then IsLocation = True
End If
End Function
strComputer = "."
'get Computer Location
const HKEY_LOCAL_MACHINE = &H80000002
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Policies\Microsoft\Windows NT\Printers"
strValueName = "PhysicalLocation"
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,computerLocation
'delete all connected network printers
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer")
For Each objPrinter in colInstalledPrinters
If (left(objPrinter.Name,2) = "\\") Then objNetwork.RemovePrinterConnection objPrinter.Name ' objPrinter.serverName & "\" & objPrinter.shareName
'if ((left(objPrinter.Name,2) = "\\") And Not (IsLocation(computerLocation,objPrinter.Location))) then objNetwork.RemovePrinterConnection objPrinter.Name
Next
'enumerate AD printers
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 serverName, Location, UNCName FROM " _
& " 'LDAP://OU=Domain Controllers,DC=intranet,DC=domain,DC=local' WHERE objectClass='printQueue'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
printerLocation = objRecordSet.Fields("Location").Value
printerShare = objRecordSet.Fields("UNCName").Value
if IsLocation(computerLocation,printerLocation) Then objNetwork.AddWindowsPrinterConnection printerShare
objRecordSet.MoveNext
Loop
'enumerate connected printers and choose default
'if (printerLocation = computerLocation) Then objNetwork.SetDefaultPrinter printerShare
скрипт взят с сайта www.sysadmins.ru
на работоспособность пока не проверял. Но на первыйвзгляд - работать должно.
Всем здравия, ищю помощи в реализации следующего фрагмета -
я использую скрипт для автоматического подключения сетевых принтеров
Option Explicit
Dim oNetwork, PrintPath1,PrintPath2
Set oNetwork = CreateObject("WScript.Network")
PrintPath1 = "\\server01\printer1"
PrintPath2 = "\\serverr01\printer2"
oNetwork.AddWindowsPrinterConnection PrintPath1
oNetwork.AddWindowsPrinterConnection PrintPath2
и автоматом устанавливаю один из них Принтером по-умолчанию
Option Explicit
Dim oNetwork, sPrintPath
Set oNetwork = CreateObject("WScript.Network")
oNetwork.SetDefaultPrinter "\\server1\printer1"
но есть такая фишка что у некоторых пользователей есть свои принтеры которые поключены непосредствеено к PC и стоят как Притер по умолчанию. Грабля в том что я немогу написать скрипт проверки на наличие уже существующего Принтера по умолчания.
Помогите кто чем может
я использую скрипт для автоматического подключения сетевых принтеров
Option Explicit
Dim oNetwork, PrintPath1,PrintPath2
Set oNetwork = CreateObject("WScript.Network")
PrintPath1 = "\\server01\printer1"
PrintPath2 = "\\serverr01\printer2"
oNetwork.AddWindowsPrinterConnection PrintPath1
oNetwork.AddWindowsPrinterConnection PrintPath2
и автоматом устанавливаю один из них Принтером по-умолчанию
Option Explicit
Dim oNetwork, sPrintPath
Set oNetwork = CreateObject("WScript.Network")
oNetwork.SetDefaultPrinter "\\server1\printer1"
но есть такая фишка что у некоторых пользователей есть свои принтеры которые поключены непосредствеено к PC и стоят как Притер по умолчанию. Грабля в том что я немогу написать скрипт проверки на наличие уже существующего Принтера по умолчания.
Помогите кто чем может
Хорошая идея, сегодня проверю.
да кстати если кому нужно - хорошая база скриптов на http://www.microsoft.com/technet/script ... fault.mspx
да кстати если кому нужно - хорошая база скриптов на http://www.microsoft.com/technet/script ... fault.mspx
malup
не понял при входе куда и какой принтер ?
Если меется ввиду на сервер терминалов то подключение локального (для пользователя) сетевого принтера у него происходит автоматом, если не запрещено политиками и настройками профиля пользователя. А удаленные сетевые принтера (локальные для сервера терминалов) можно легко подключить при помощи приведенного тут скипта.
В обще конкретизируй вопрос, что конкретно не получается и что нужно.
не понял при входе куда и какой принтер ?
Если меется ввиду на сервер терминалов то подключение локального (для пользователя) сетевого принтера у него происходит автоматом, если не запрещено политиками и настройками профиля пользователя. А удаленные сетевые принтера (локальные для сервера терминалов) можно легко подключить при помощи приведенного тут скипта.
В обще конкретизируй вопрос, что конкретно не получается и что нужно.
Правильно заданный вопрос - это уже половина ответа.
Сообщений: 33
• Страница 3 из 4 • 1, 2, 3, 4
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10