none
Скрипт обрезает имя сервера RRS feed

  • Вопрос

  • Добрый день!
    Есть скрипт, который при логине подключает пользователю принтеры из его контейнера.

    Option Explicit
    
    Function GetCurrentUserOUPath		'определяем контейнер пользователя запустившего скрипт
      On Error Resume Next
      Dim objADSysInfo  : Set objADSysInfo = CreateObject("ADSystemInfo")
      Dim objADObject   : Set objADObject = GetObject("LDAP://" & objADSysInfo.UserName)
      GetCurrentUserOUPath = objADObject.Parent
      On Error GoTo 0
    End Function
    
    Sub ConnectPrinter(ByVal objPublishedPrinter)	'определяем уже подключенные принтеры, сравниваем с опубликованными и подключаем
      On Error Resume Next
      Dim objWSHNetwork : Set objWSHNetwork = WScript.CreateObject("WScript.Network")
      Dim objPrinters   : Set objPrinters   = objWSHNetwork.EnumPrinterConnections		'определяем подключенные принтеры
      Dim strPublishedPrinterPath : strPublishedPrinterPath = "\\" & objPublishedPrinter.serverName & "l\" & objPublishedPrinter.printerName
    MsgBox objPublishedPrinter.serverName
      Dim i : i = 0
      Dim j : j = objPrinters.count-1
      While i <= j
        If (UCase(objPrinters.Item(i)) = UCase(strPublishedPrinterPath)) Then		'сравниваем опубликованный с уже подключенными
          Exit Sub
        End If
        i = i + 1
      Wend
      objWSHNetwork.AddWindowsPrinterConnection (strPublishedPrinterPath)		'подключение опубликованного принтера
      On Error GoTo 0  
    End Sub
    
    Dim objConnection   : Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open "Provider=ADsDSOObject;"
    Dim objCommand      : Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection
    objCommand.CommandText = "SELECT * FROM '" & GetCurrentUserOUPath & "' WHERE objectClass='printQueue'"
    Dim objRecordSet    : Set objRecordSet = objCommand.Execute		'Выбираем опубликованные принтеры в контейнере
    Do Until objRecordset.EOF
      Dim objPrintQueue : Set objPrintQueue = GetObject(objRecordset.Fields("ADsPath").Value)
      Call ConnectPrinter(objPrintQueue)		'Вызываем процедуру сравнения и подключения
      objRecordSet.MoveNext
    Loop
    objConnection.Close
    On Error Goto 0
    MsgBox выводит имя севера и там видно, что не хватает последнего символа (по этом вверху добавлена L).
    Подскажите как вылечить данную беду?

    В таком варианте все работает, но дописывание L немного меня коробит.


    • Перемещено Vector BCOModerator 8 октября 2015 г. 12:08 Вопрос про изменение скрипта
    8 октября 2015 г. 12:06

Ответы

  • Неправильно заполнен servername, а не обрезается вывод. Поправить в AD данный атрибут:

    Get-ADObject -Filter "ServerName -like '*.loca' -and ObjectClass -eq 'printQueue'" -Properties servername | Foreach {Set-ADObject $_ -Replace @{"servername"="$($_.servername)l"}}


    • Изменено KazunEditor 9 октября 2015 г. 11:03
    • Помечено в качестве ответа Denis_56 9 октября 2015 г. 12:44
    9 октября 2015 г. 11:02
    Отвечающий

Все ответы

  • в имени сервера сколько знаков? возможно речь идет про нетбиос имя которое имеет ограниченную длину

    The opinion expressed by me is not an official position of Microsoft


    8 октября 2015 г. 12:51
    Модератор
  • Если указан org210-dc01 , то остается org210-dc0

    Если указать org210-dc01.org21.organiza.local остается org210-dc01.org21.organiza.loca

    8 октября 2015 г. 13:06
  • у меня нормально, ничо не режется

    а если так дернуть ничо не режет?

    gwmi Win32_Printer | select name,servername

    • Изменено Svolotch 8 октября 2015 г. 14:49
    8 октября 2015 г. 14:32
  • Очень странно, проверил на другом пк то же самое, нет последнего символа. Зашел через ADSIEDIT посмотреть параметр serverName у принтера в AD, все нормально хранится полное наименование сервера.
    9 октября 2015 г. 5:34
  • Покажите скриншот выполнения, а то пока только на словах :

    Sub ConnectPrinter(ByVal objPublishedPrinter)

    Wscript.Echo "\\" & objPublishedPrinter.serverName & "\" & objPublishedPrinter.printerName Wscript.Echo objPublishedPrinter.serverName End Sub

    И в cmd:

    cscript //nologo C:\vb\myscript.vbs

    9 октября 2015 г. 7:00
    Отвечающий
  • снизу снимок строки принтера в АД

    • Изменено Denis_56 9 октября 2015 г. 7:39
    9 октября 2015 г. 7:37
  • И доп. вывод:

    dsquery * domainroot -filter "&(objectclass=printQueue)" -attr servername name distinguishedname

    9 октября 2015 г. 7:49
    Отвечающий
  • Команда выводит 100 очередей московского сервера печати, нашего не видно.
    9 октября 2015 г. 9:49
  • dsquery * domainroot -filter "&(objectclass=printQueue)" -attr servername name distinguishedname -limit 0

    ключ -limit 0 скажет вывести все

    ну или вместо domainroot указать вашу оушку
    • Изменено Svolotch 9 октября 2015 г. 9:54
    9 октября 2015 г. 9:52
  • Забыл сказать, сервер печати находится в старом домене org21.organiza.local, принтеры расположены в контейнерах нового домена testik.local

      servername                        name                                                             distinguishedname                                                                                 
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-Revizor Xerox WorkCenter 3315    CN=org21-dc02.org21.organiza.local-Revizor Xerox WorkCenter 3315,OU=AUDIT,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local  
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-OFOHP9040                        CN=org21-dc02.org21.organiza.local-OFOHP9040,OU=OFO,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local                        
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-OFO2                             CN=org21-dc02.org21.organiza.local-OFO2,OU=OFO,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local                             
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-PROG HP 9040 PCL 5e              CN=org21-dc02.org21.organiza.local-PROG HP 9040 PCL 5e,OU=OIS,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local              
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-Prog Xerox WC5222 PCL 6          CN=org21-dc02.org21.organiza.local-Prog Xerox WC5222 PCL 6,OU=OIS,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local          
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-OPERXero3315                     CN=org21-dc02.org21.organiza.local-OPERXero3315,OU=OPER,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local                    
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-OperHPLa                         CN=org21-dc02.org21.organiza.local-OperHPLa,OU=OPER,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local                        
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-UchetXer                         CN=org21-dc02.org21.organiza.local-UchetXer,OU=UCHET,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local                       
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-UCHET HP 9040 PCL 5e             CN=org21-dc02.org21.organiza.local-UCHET HP 9040 PCL 5e,OU=UCHET,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local           
      org21-dc02.org21.organiza.loca    org21-dc02.org21.organiza.local-ZakupkiX                         CN=org21-dc02.org21.organiza.local-ZakupkiX,OU=ZAKUPKI,OU=org,OU=Users,OU=2100,OU=FT,DC=testik,DC=local                     
      

    9 октября 2015 г. 10:05
  • А теперь вывод:

    dsquery server -domain org21.organiza.loca

    9 октября 2015 г. 10:14
    Отвечающий
  • в таком варианте ничего не выдал, выдал в следующем варианте

    dsquery server -domain org21.organiza.local

    "CN=ORG21-DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ORG21,DC=organiza,DC=local"
    "CN=ORG21-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ORG21,DC=organiza,DC=local"

    Кстати, прогнал скрипт на компьютере в старом домене имя сервера выдал нормально, без потри последнего символа.

    9 октября 2015 г. 10:50
  • Неправильно заполнен servername, а не обрезается вывод. Поправить в AD данный атрибут:

    Get-ADObject -Filter "ServerName -like '*.loca' -and ObjectClass -eq 'printQueue'" -Properties servername | Foreach {Set-ADObject $_ -Replace @{"servername"="$($_.servername)l"}}


    • Изменено KazunEditor 9 октября 2015 г. 11:03
    • Помечено в качестве ответа Denis_56 9 октября 2015 г. 12:44
    9 октября 2015 г. 11:02
    Отвечающий
  • Получается скрипт дописал в АД последний символ сервера печати, т.е. могу сделать вывод, что при создании объекта "Принтер" по каким-то причинам пропал последний символ сервера печати при внесении в АД.
    Точно знаю, что все символы вносил сам, к тому же сервер перед тем как создать объект в АД его тестирует и если путь указан неправильно, то "Принтер" в АД не добавится.
    9 октября 2015 г. 12:49