none
Необходим логон скрипт для переподключения принтеров пользователя на другой принт-сервер RRS feed

  • Вопрос

  • Необходим скрипт на vbs, который бы проверял, какие сетевые принтеры подключены у пользователя и переподключал их с другого принт-сервера.
    Спасибо.

Ответы

  • Option explicit                       
    On Error Resume Next 

    Dim strPrintServerOld, strPrintServerNew, strComputer, strPrintShare         
    Dim objWMIService, objPrinter, objNetwork          
    Dim colInstalledPrinters       

    'If any printer on the user's PC has a path other than the old server
    'nothing will happen.
    strPrintServerOld = "\\ssa-fs02"
    strPrintServerNew = "\\ssa-ff-p1"

    strComputer = "." 
    Set objNetwork = CreateObject("WScript.Network")

    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 

    Set colInstalledPrinters =  objWMIService.ExecQuery _
        ("Select * from Win32_Printer Where Default = True")

    For Each objPrinter in colInstalledPrinters
      strPrintShare = objPrinter.ShareName
     
      'If the old server was in all Capital letters change it to small letters
      If objPrinter.ServerName = "\\OLDSERVER"  Then
        objPrinter.ServerName = "\\oldserver"
      End if
     
      'Iterate through default printers first
      If objPrinter.ServerName = strPrintServerOld And objPrinter.default = True Then
        objNetwork.AddWindowsPrinterConnection strPrintServerNew & "\" _
          & strPrintShare     
        objNetwork.SetDefaultPrinter(strPrintServerNew & "\" & strPrintShare)
        WScript.Sleep(5000)
       
        'Script will quit if it cannot connect to the new server
        If err.Number <> 0 Then
          WScript.Echo "Could not connect to " & strPrintServerNew & vbCrLf  _
          & " Script is exiting without changes"
          err.Clear
          WScript.Quit 
        End if
       
      Else  'These four lines can be commented out to reduce messages
            'for a logon script.
          End if
      Next 

    Set colInstalledPrinters =  objWMIService.ExecQuery _
        ("Select * from Win32_Printer")
       
    For Each objPrinter in colInstalledPrinters
      strPrintShare = objPrinter.ShareName
     
      'If the old server was in all Capital letters change it to small letters
      If objPrinter.ServerName = "\\OLDSERVER"  Then
        objPrinter.ServerName = "\\newserver"
      End if
     
      If objPrinter.ServerName = strPrintServerOld Then       
       
        'If not the default and in the list then create a new connection
        objNetwork.AddWindowsPrinterConnection strPrintServerNew & "\" _
          & strPrintShare
        WScript.Sleep(5000)         
             
        'Once all printers are mapped with the new server, the old server mapping
        'is removed
        objNetwork.RemovePrinterConnection strPrintServerOld & "\" _
          & StrPrintShare
           
      End If 
    Next

    'This message can be commented out for a logon script.
    WScript.Echo "Finished with Printers"

    Set objWMIService = Nothing  
    Set objNetwork = Nothing     
    • Помечено в качестве ответа Ivan Osipov 26 августа 2009 г. 15:01
    26 августа 2009 г. 15:01

Все ответы

  • Смотрите примеры скриптов здесь: http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
    Модифицируйте их под свои задачи.
    готовый скрипт Вам вряд ли кто-то напишет.

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезным, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
  • Вот http://www.microsoft.com/technet/scriptcenter/scripts/printing/client/default.mspx примеры, касающиеся подключения/отключения принтеров:

    Подключение:

    http://www.microsoft.com/technet/scriptcenter/scripts/printing/client/prclvb01.mspx

    Отключение:

    http://www.microsoft.com/technet/scriptcenter/scripts/printing/client/prclvb05.mspx

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезным, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
  • Можно обойтись без скрипта использовав Group Policy Preferences


    Сазонов Илья http://www.itcommunity.ru/blogs/sie/
    Модератор
  • Можете поподробнее написать об этом?
  • Я знаю, как подключить и отключить принтер. Интересует лишь, как переподключить именно тот принтер, который сейчас покдлючен у пользователя.
  • Я знаю, как подключить и отключить принтер. Интересует лишь, как переподключить именно тот принтер, который сейчас покдлючен у пользователя.
    Предполагаю, что в простом варианте это должно выглядеть так:

    1. Получаем список принтеров, которые подключены у пользователя
    2. Анализируем этот список и переподключаем принтеры, если это необходимо....

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
  • Как получить список принтеров - тоже в примерах есть. Вам нужно только скомпоновать примеры под Ваши задачи....
    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
  • Option explicit                       
    On Error Resume Next 

    Dim strPrintServerOld, strPrintServerNew, strComputer, strPrintShare         
    Dim objWMIService, objPrinter, objNetwork          
    Dim colInstalledPrinters       

    'If any printer on the user's PC has a path other than the old server
    'nothing will happen.
    strPrintServerOld = "\\ssa-fs02"
    strPrintServerNew = "\\ssa-ff-p1"

    strComputer = "." 
    Set objNetwork = CreateObject("WScript.Network")

    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 

    Set colInstalledPrinters =  objWMIService.ExecQuery _
        ("Select * from Win32_Printer Where Default = True")

    For Each objPrinter in colInstalledPrinters
      strPrintShare = objPrinter.ShareName
     
      'If the old server was in all Capital letters change it to small letters
      If objPrinter.ServerName = "\\OLDSERVER"  Then
        objPrinter.ServerName = "\\oldserver"
      End if
     
      'Iterate through default printers first
      If objPrinter.ServerName = strPrintServerOld And objPrinter.default = True Then
        objNetwork.AddWindowsPrinterConnection strPrintServerNew & "\" _
          & strPrintShare     
        objNetwork.SetDefaultPrinter(strPrintServerNew & "\" & strPrintShare)
        WScript.Sleep(5000)
       
        'Script will quit if it cannot connect to the new server
        If err.Number <> 0 Then
          WScript.Echo "Could not connect to " & strPrintServerNew & vbCrLf  _
          & " Script is exiting without changes"
          err.Clear
          WScript.Quit 
        End if
       
      Else  'These four lines can be commented out to reduce messages
            'for a logon script.
          End if
      Next 

    Set colInstalledPrinters =  objWMIService.ExecQuery _
        ("Select * from Win32_Printer")
       
    For Each objPrinter in colInstalledPrinters
      strPrintShare = objPrinter.ShareName
     
      'If the old server was in all Capital letters change it to small letters
      If objPrinter.ServerName = "\\OLDSERVER"  Then
        objPrinter.ServerName = "\\newserver"
      End if
     
      If objPrinter.ServerName = strPrintServerOld Then       
       
        'If not the default and in the list then create a new connection
        objNetwork.AddWindowsPrinterConnection strPrintServerNew & "\" _
          & strPrintShare
        WScript.Sleep(5000)         
             
        'Once all printers are mapped with the new server, the old server mapping
        'is removed
        objNetwork.RemovePrinterConnection strPrintServerOld & "\" _
          & StrPrintShare
           
      End If 
    Next

    'This message can be commented out for a logon script.
    WScript.Echo "Finished with Printers"

    Set objWMIService = Nothing  
    Set objNetwork = Nothing     
    • Помечено в качестве ответа Ivan Osipov 26 августа 2009 г. 15:01
    26 августа 2009 г. 15:01
  • В догонку такой вопрос: скрипт замечательно работает, если пользователь - локальный админ на своей машине. Но если пользователь не админ, ничего не происходит. Можно ли запустить скрипт через ГП от имени пользователя, но с админскими правами?
    MCP | scriptoholic | PowerShell | SCCM 2007 | SMS 2003
    31 августа 2009 г. 12:31