Автоматическое подключение принтеров

Windows Script Host (WSH), WMI, vbs скрипты и т.д. Создание и применение скриптов.

Модератор: Модераторы

Администратор
Сообщения: 3444
Зарегистрирован: 19 дек 2003, 13:36
Откуда: Москва

Сообщение domovoy » 19 янв 2006, 16:00

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

Новый участник
Сообщения: 1
Зарегистрирован: 31 янв 2006, 18:59

Сообщение Тоооныч » 31 янв 2006, 19:06

Вопрос к создателям скрипта:
А почему нельзя сделать подключение принтера к пользователю если их размещение совпадает??? Вроде это будет более правильно.
Вот например у меня порядка 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

на работоспособность пока не проверял. Но на первыйвзгляд - работать должно.

Администратор
Сообщения: 3444
Зарегистрирован: 19 дек 2003, 13:36
Откуда: Москва

Сообщение domovoy » 02 фев 2006, 19:05

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

Новый участник
Сообщения: 2
Зарегистрирован: 07 апр 2006, 12:18

Сообщение burunduk » 07 апр 2006, 12:25

Всем здравия, ищю помощи в реализации следующего фрагмета -
я использую скрипт для автоматического подключения сетевых принтеров
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 и стоят как Притер по умолчанию. Грабля в том что я немогу написать скрипт проверки на наличие уже существующего Принтера по умолчания.

Помогите кто чем может

Администратор
Сообщения: 3444
Зарегистрирован: 19 дек 2003, 13:36
Откуда: Москва

Сообщение domovoy » 07 апр 2006, 13:35

Попробуй прописать на локальный принтерах значение Location скажем в "Локальный" и проверять по значению этого поля. Если принтер существует и поле имеет это значение то соответственно не назначать принтер по умолчанию а просто подключить новые
Правильно заданный вопрос - это уже половина ответа.

Новый участник
Сообщения: 2
Зарегистрирован: 07 апр 2006, 12:18

Сообщение burunduk » 07 апр 2006, 13:39

Хорошая идея, сегодня проверю.
да кстати если кому нужно - хорошая база скриптов на http://www.microsoft.com/technet/script ... fault.mspx

Новый участник
Сообщения: 1
Зарегистрирован: 23 май 2006, 09:48
Откуда: Питер

Сообщение agent_000 » 23 май 2006, 10:03

Привет.
А вот подскажите, если мне принт-сервер на автомате цеплять надо, то как это реализовать.

Или точнее впихнуть в этот скрипт кусок другого скрипта.

Новый участник
Сообщения: 1
Зарегистрирован: 18 янв 2007, 13:00

Сообщение malup » 18 янв 2007, 13:22

Помогите срочно надо как мне написать скрипт что бы при входе удатеным рабочим столом пользователям подключасля сетевой принтер. Если можно подробно. Что-как и куда.

Администратор
Сообщения: 3444
Зарегистрирован: 19 дек 2003, 13:36
Откуда: Москва

Сообщение domovoy » 22 янв 2007, 10:44

malup
не понял при входе куда и какой принтер ?
Если меется ввиду на сервер терминалов то подключение локального (для пользователя) сетевого принтера у него происходит автоматом, если не запрещено политиками и настройками профиля пользователя. А удаленные сетевые принтера (локальные для сервера терминалов) можно легко подключить при помощи приведенного тут скипта.
В обще конкретизируй вопрос, что конкретно не получается и что нужно.
Правильно заданный вопрос - это уже половина ответа.

CrazyRaven

Сообщение CrazyRaven » 26 янв 2007, 09:42

Ребята, понимаю что не в тему, но подобных тем тут нет. Реально хочу выучить VBScript либо Jscript но не могу найти нигде рускоязычной документации, чтобы с "нуля", а не так чтобы с середины :)

Пред.След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10