Доброго времени суток.
Подскажите пожалуйста как вот это
Set objComputer = GetObject("LDAP://" & strComputerDN)
objComputer.Get("Location")
написать на JScript?
P.S. просто начал разбираться с JS, а не с VB, поэтому хочется разобраться до конца, на примере вашего скрипта. Скрипт очень полезный
Подскажите пожалуйста как вот это
Set objComputer = GetObject("LDAP://" & strComputerDN)
objComputer.Get("Location")
написать на JScript?
[/quote]
Строка
objComputer.Get("Location") на JScript остается без изменений, а что касается
Set objComputer = GetObject("LDAP://" & strComputerDN),
то здесь минимум изменений.
возникла проблемма что на локальной машине куда подключен принтер он не становиться по умолчанию , решилось вот так
If PrintLocation = objPrinter.Location Then
objPrinter.SetDefaultPrinter(objPrinter.NAME)
WScript.Quit
И еще вопросик. ПРименяю такой же скрипт(подключение принтера) для политик АД, но когда он в разделе "Конфигурация компьютера" секции "Компьютер\Конфигурация Windows..... Сценарии..." политики подразделения - не выполняется. Стоит перенести его в ту же секцию раздела "Конфигурация пользователя" той же политики - все нормально, скрипт выполняется, принтер подключается.
Как сделать лог на выполнение сценария и как его потом просмотреть
Небольшая переделка скрипта. На мой взгляд, с функциями удобнее.
Код
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
Преставте пользователь пересел за другой компьютер не у себя в отделе, и надо что бы при входе в систему ему устанавливались принтеры соответствующие его учётной записи, а не местоположению. А то получается пользователь скакнул создаётся новый профиль и приходиться идти ногами подключать притеры, а типа объясняешь им "заходите на принт сервер по сети ,выбирайте любой принтер, двойной щелчёк на иконке и печатайте" особо не помогло не хотят учиться. Попробовал rundll32 printui.dll,PrintUIEntry /in /n \\имя сервера\имя принтера через cmd что бы выполнялось при входе всё работает но не всё устраивает.
Кстати в написании скриптов полный ламмер, но очень хочу научиться. А то все говорят неполучиться надо знать VB или JS
Хотелось бы высказать свою идею подключения принтеров, так сказать хотелку, может кто сможет сделать скрипт подключающий принтер в зависимости от имени ком-ра точнее части имени т.е. например имя 4f220 и в зависимости от сочетания букв 4f (4 этаж) подключал принтер на 4 этаже и т.д.
Да кстати есть еще вариант подключения принтеров в зависимости от вхождения ком-ов в группу, мне например так удобнее чем через локашн, вот накопал кому надо:
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