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

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

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

Новый участник
Сообщения: 1
Зарегистрирован: 21 апр 2005, 13:34

Сообщение Pegasus » 21 апр 2005, 13:38

Доброго времени суток.
Подскажите пожалуйста как вот это
Set objComputer = GetObject("LDAP://" & strComputerDN)
objComputer.Get("Location")
написать на JScript?

P.S. просто начал разбираться с JS, а не с VB, поэтому хочется разобраться до конца, на примере вашего скрипта. Скрипт очень полезный :)

Новый участник
Сообщения: 2
Зарегистрирован: 16 мар 2005, 13:38

Сообщение GL@DI@TOR » 21 апр 2005, 16:24

Цитата (Pegasus @ 21.04.2005 - 12:38)
Подскажите пожалуйста как вот это
Set objComputer = GetObject("LDAP://" & strComputerDN)
objComputer.Get("Location")
написать на JScript?

[/quote]

Строка
objComputer.Get("Location")
на JScript остается без изменений, а что касается
Set objComputer = GetObject("LDAP://" & strComputerDN),
то здесь минимум изменений.
Код

var
objComputer,
objSysInfo,
strComputerDN;

objSysInfo = WScript.CreateObject("ADSystemInfo");
strComputerDN = objSysInfo.ComputerName;
objComputer = GetObject("LDAP://"+strComputerDN);

WScript.Echo(objComputer.Get("Location"));
[/code]
Новый участник
Сообщения: 1
Зарегистрирован: 30 июн 2005, 16:09

Сообщение chodorenko » 30 июн 2005, 16:13

возникла проблемма что на локальной машине куда подключен принтер он не становиться по умолчанию , решилось вот так
If PrintLocation = objPrinter.Location Then
objPrinter.SetDefaultPrinter(objPrinter.NAME)
WScript.Quit

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

Сообщение domovoy » 30 июн 2005, 18:59

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

Новый участник
Сообщения: 14
Зарегистрирован: 30 июн 2005, 08:49

Сообщение alexcfsi » 08 июл 2005, 13:44

И еще вопросик. ПРименяю такой же скрипт(подключение принтера) для политик АД, но когда он в разделе "Конфигурация компьютера" секции "Компьютер\Конфигурация Windows..... Сценарии..." политики подразделения - не выполняется. Стоит перенести его в ту же секцию раздела "Конфигурация пользователя" той же политики - все нормально, скрипт выполняется, принтер подключается.
Как сделать лог на выполнение сценария и как его потом просмотреть

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

Сообщение domovoy » 08 июл 2005, 14:28

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

Новый участник
Сообщения: 15
Зарегистрирован: 11 май 2005, 14:52

Сообщение Vasily » 01 авг 2005, 18:53

Небольшая переделка скрипта. На мой взгляд, с функциями удобнее.

Код


option explicit
Dim  Path, strComputerDN, objSysInfo, objComputer,  Network
Dim count
Dim objWMIService,colInstalledPrinters,objPrinter
Dim PrinterName
Dim temp_bool
Dim strComputer


sub IsPrinterConnect( PrinterName,temp_bool )
    on error resume next
    set count=0
   strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters =  objWMIService.ExecQuery _
   ("Select * from Win32_Printer")
For Each objPrinter in colInstalledPrinters
   If (objPrinter.Name=PrinterName ) then count=count+1
'   Wscript.Echo "Name: " & objPrinter.Name
Next
   if (count >0) then  temp_bool  = true else temp_bool =false
end sub

sub ConnectPrinter ( PrinterName )
    on error resume next
           Network.AddWindowsPrinterConnection PrinterName
end sub

sub ConnectDefaultPrinter ( PrinterName )
    on error resume next
           Network.AddWindowsPrinterConnection PrinterName
           Network.SetDefaultPrinter PrinterName
end sub

on error resume next


Set Network = CreateObject("Wscript.Network")
Path = Network.ComputerName
Set objSysInfo = CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.ComputerName
Set objComputer = GetObject("LDAP://" & strComputerDN)
'Назначаем необходимый для установки сетевой принтер
'в зависимости от значения поля Location
Select Case objComputer.Get("Location")

 Case "F7ROOM01"
call  IsPrinterConnect( "\\MyServerName\SHARPAR-M205_F7R15", temp_bool)
if (temp_bool=false)then call  ConnectDefaultPrinter("\\MyServerName\SHARPAR-M205_F7R15")
 Case "F7ROOM02"
call  IsPrinterConnect( "\\MyServerName\SHARPAR-M205_F7R15", temp_bool)
if (temp_bool=false)then call ConnectDefaultPrinter( "\\MyServerName\SHARPAR-M205_F7R15")
    Case "F7ROOM03"
call  IsPrinterConnect( "\\MyServerName\SHARPAR-M205_F7R15", temp_bool)
if (temp_bool=false)then call ConnectPrinter( "\\MyServerName\SHARPAR-M205_F7R15")
call  IsPrinterConnect( "\\MyServerName\HPLJ1320_F7R03", temp_bool)
if (temp_bool=false)then call ConnectDefaultPrinter( "\\MyServerName\HPLJ1320_F7R03")

.............................................

 Case "F1"
call  IsPrinterConnect( "\\MyServerName\HPLJ5500_1FL", temp_bool)
if (temp_bool=false)then call ConnectPrinter( "\\MyServerName\HPLJ5500_1FL")
call  IsPrinterConnect( "\\MyServerName\HPLJ1320_F1", temp_bool)
if (temp_bool=false)then call ConnectDefaultPrinter( "\\MyServerName\HPLJ1320_F1")
 Case Else
 WScript.Quit
 End Select

[/code]
Новый участник
Сообщения: 4
Зарегистрирован: 15 сен 2005, 13:00

Сообщение xdeus » 15 сен 2005, 13:59

Привет, надоело админить ногами не поможете????

Вопрос такой как написать скрипт.

Преставте пользователь пересел за другой компьютер не у себя в отделе, и надо что бы при входе в систему ему устанавливались принтеры соответствующие его учётной записи, а не местоположению. А то получается пользователь скакнул создаётся новый профиль и приходиться идти ногами подключать притеры, а типа объясняешь им "заходите на принт сервер по сети ,выбирайте любой принтер, двойной щелчёк на иконке и печатайте" особо не помогло не хотят учиться. Попробовал rundll32 printui.dll,PrintUIEntry /in /n \\имя сервера\имя принтера через cmd что бы выполнялось при входе всё работает но не всё устраивает.

Кстати в написании скриптов полный ламмер, но очень хочу научиться. А то все говорят неполучиться надо знать VB или JS

Новый участник
Сообщения: 2
Зарегистрирован: 19 янв 2006, 13:40

Сообщение ABat » 19 янв 2006, 14:02

Хотелось бы высказать свою идею подключения принтеров, так сказать хотелку, может кто сможет сделать скрипт подключающий принтер в зависимости от имени ком-ра точнее части имени т.е. например имя 4f220 и в зависимости от сочетания букв 4f (4 этаж) подключал принтер на 4 этаже и т.д.

Новый участник
Сообщения: 2
Зарегистрирован: 19 янв 2006, 13:40

Сообщение ABat » 19 янв 2006, 14:09

Да кстати есть еще вариант подключения принтеров в зависимости от вхождения ком-ов в группу, мне например так удобнее чем через локашн, вот накопал кому надо:

Option Explicit

Dim objNetwork, objSysInfo, strUserDN
Dim objGroupList, objUser, objFSO
Dim strComputerDN, objComputer

Set objNetwork = CreateObject("Wscript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSysInfo = CreateObject("ADSystemInfo")
strUserDN = objSysInfo.userName
strComputerDN = objSysInfo.computerName

' Bind to the user and computer objects with the LDAP provider.
Set objUser = GetObject("LDAP://" & strUserDN)
Set objComputer = GetObject("LDAP://" & strComputerDN)

' Add a network printer if the computer is a member of the group.
' Make this printer the default.
If IsMember(objComputer, "4floor") Then
objNetwork.AddWindowsPrinterConnection "\\server\hp"
End If

If IsMember(objComputer, "2floor") Then
objNetwork.AddWindowsPrinterConnection "\\server\hp2"
End If

' Clean up.
Set objNetwork = Nothing
Set objFSO = Nothing
Set objSysInfo = Nothing
Set objGroupList = Nothing
Set objUser = Nothing
Set objComputer = Nothing

Function IsMember(objADObject, strGroup)
' Function to test for group membership.
' objGroupList is a dictionary object with global scope.

If IsEmpty(objGroupList) Then
Set objGroupList = CreateObject("Scripting.Dictionary")
End If
If Not objGroupList.Exists(objADObject.sAMAccountName & "\") Then
Call LoadGroups(objADObject, objADObject)
objGroupList(objADObject.sAMAccountName & "\") = True
End If
IsMember = objGroupList.Exists(objADObject.sAMAccountName & "\" _
& strGroup)
End Function

Sub LoadGroups(objPriObject, objADSubObject)
' Recursive subroutine to populate dictionary object objGroupList.

Dim colstrGroups, objGroup, j

objGroupList.CompareMode = vbTextCompare
colstrGroups = objADSubObject.memberOf
If IsEmpty(colstrGroups) Then
Exit Sub
End If
If TypeName(colstrGroups) = "String" Then
Set objGroup = GetObject("LDAP://" & colstrGroups)
If Not objGroupList.Exists(objPriObject.sAMAccountName & "\" _
& objGroup.sAMAccountName) Then
objGroupList(objPriObject.sAMAccountName & "\" _
& objGroup.sAMAccountName) = True
Call LoadGroups(objPriObject, objGroup)
End If
Set objGroup = Nothing
Exit Sub
End If
For j = 0 To UBound(colstrGroups)
Set objGroup = GetObject("LDAP://" & colstrGroups(j))
If Not objGroupList.Exists(objPriObject.sAMAccountName & "\" _
& objGroup.sAMAccountName) Then
objGroupList(objPriObject.sAMAccountName & "\" _
& objGroup.sAMAccountName) = True
Call LoadGroups(objPriObject, objGroup)
End If
Next
Set objGroup = Nothing
End Sub

Пред.След.

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

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

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