none
Изменение настроек принтера с помощью скрипта RRS feed

  • Общие обсуждения

  • На сервере в терминальном режиме, при подключении принтеров у пользователей часто сбиваются настройки принтера. Необходимо с помощью скрипта при входе в систему восстанавливать настройки принтера. Мне подсказали, что есть команды для этого:

    Запись сведений принтера в файл:
    rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat"

    Восстановление всех параметров принтера из файла:
    rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat"
      

    Проверял -  работает. Только его пока невозможно применять в моем случае, так как принтер создается при подключении в формате типа: HP LJ 9050 (от OPERATOR) в сеансе 5. Следовательно имя принтера мне не известно и оно должно подставляться автоматически в команду выше для восстановления.

     

    Необходимо написать скрипт для осуществелния этого действия!

    5 января 2009 г. 3:21

Все ответы

  • ответ на вопрос в виде VBS, скрипт выводит список принтеров:

    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
      Set colInstalledPrinters =  objWMIService.ExecQuery ("Select * from Win32_Printer")
      For Each objPrinter in colInstalledPrinters
    wscript.echo objPrinter.Name
      Next


     Не знаю насколько ситуация подходит, но как альтернативу можно посмотреть вот такую реализацию: 
    там ничего не сохраняется, а принтеры присоединяются при входе в зависимости от месторасположения.

    все это можно переписать под повершелл при желании.
    5 января 2009 г. 13:48
  •  

    Полная засада вообще с этим вопросом: Есть даже скрипт, который без проблем меняет все как надо:

    Code Snippet

    FOR /F "tokens=2* delims= " %%A IN ('reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v Device') DO SET Printer=%%B
    FOR /F "tokens=1 delims=," %%A IN ("%Printer%") DO SET Printer=%%A
    rundll32 printui.dll,PrintUIEntry /Sr /n "%printer%" /a "\\storage\Install\Software\cmd\HP9050.dat" 2

     

    Он работает только от имени администратора. Что не подходит. Удалось с помощью сканера реестра выявить, что меняется при снятии галочки "Включить дополнительные возможности печати". Пробовал написать другой скрипт:

     

    Code Snippet

    FOR /F "tokens=2* delims= " %%A IN ('reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v Device') DO SET Printer=%%B
    FOR /F "tokens=1 delims=," %%A IN ("%Printer%") DO SET Printer=%%A
    reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\%Printer%" /v Attributes /t REG_DWORD /d 6656 /f
    reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\%Printer%"\DsDriver /v printCollate /t REG_BINARY /d 00 /f
    reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Printers\%Printer%" /v Attributes /t REG_DWORD /d 6656 /f
    reg add "HKLM\SYSTEM\ControlSet001\Control\Print\Printers\%Printer%"\DsDriver /v printCollate /t REG_BINARY /d 00 /f
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\%Printer%" /v Attributes /t REG_DWORD /d 6656 /f
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\%Printer%"\DsDriver /v printCollate /t REG_BINARY /d 00 /f

     

     

    Изменения вносятся в реестр, а настройки остаются. Не до конца понимаю, как происходит изменение настроек. Может кто силен в этом. Надоело уже постоянно зходить в терминале от имени администратора, и менять настройки создаваемого принтера пользователям.
    21 января 2009 г. 2:10
  •  
    Andrei-ka написал:

    Проверял -  работает. Только его пока невозможно применять в моем случае, так как принтер создается при подключении в формате типа: HP LJ 9050 (от OPERATOR) в сеансе 5. Следовательно имя принтера мне не известно и оно должно подставляться автоматически в команду выше для восстановленияНеобходимо написать скрипт для осуществелния этого действия

    Как правило, в терминальных сессиях пользователя, принтером по умолчанию является тот же самый принтер, что и принтер в обычном режиме работы. В таком случае с относительным успехом можно использовать следующую конструкцию.

     

    1 $Printers = Get-WmiObject -Class Win32_Printer  -ComputerName $ComputerName 
    2 $Printers | ForEach-Object {
    3     if ($_.Default)
    4     {
    5         # Список действий, 
    6         # которые Вы хотите
    7         # произвести с объектом
    8                             break
    9     } 
    10
    1
    <FONT color=#800080 size=2 face="Courier New"><FONT color=#800080 size=2   
    2 face="Courier New"><FONT color=#800080 size=2 face="Courier New">  
    3 <P>$Printers</FONT></FONT></FONT><FONT size=2 face="Courier New"> </FONT><FONT   
    4 color=#ff0000 size=2 face="Courier New"><FONT color=#ff0000 size=2   
    5 face="Courier New"><FONT color=#ff0000 size=2   
    6 face="Courier New">=</FONT></FONT></FONT><FONT size=2 face="Courier New">   
    7 </FONT><B><FONT color=#5f9ea0 size=2 face="Courier New"><FONT color=#5f9ea0   
    8 size=2 face="Courier New"><FONT color=#5f9ea0 size=2   
    9 face="Courier New">Get-WmiObject</B></FONT></FONT></FONT><FONT size=2   
    10 face="Courier New"> </FONT><I><FONT color=#5f9ea0 size=2   
    11 face="Courier New"><FONT color=#5f9ea0 size=2 face="Courier New"><FONT   
    12 color=#5f9ea0 size=2 face="Courier New">-Class</I></FONT></FONT></FONT><FONT   
    13 size=2 face="Courier New"> </FONT><FONT color=#800000 size=2   
    14 face="Courier New"><FONT color=#800000 size=2 face="Courier New"><FONT   
    15 color=#800000 size=2 face="Courier New">Win32_Printer</FONT></FONT></FONT><FONT   
    16 size=2 face="Courier New"> </FONT><I><FONT color=#5f9ea0 size=2   
    17 face="Courier New"><FONT color=#5f9ea0 size=2 face="Courier New"><FONT   
    18 color=#5f9ea0 size=2   
    19 face="Courier New">-ComputerName</I></FONT></FONT></FONT><FONT size=2   
    20 face="Courier New"> </FONT><FONT color=#800080 size=2 face="Courier New"><FONT   
    21 color=#800080 size=2 face="Courier New"><FONT color=#800080 size=2   
    22 face="Courier New">$ComputerName</P>  
    23 <P></FONT></FONT></FONT><FONT color=#800080 size=2 face="Courier New"><FONT   
    24 color=#800080 size=2 face="Courier New"><FONT color=#800080 size=2   
    25 face="Courier New">$Printers</FONT></FONT></FONT><FONT size=2   
    26 face="Courier New"><FONT size=2 face="Courier New"> | </FONT></FONT><B><FONT   
    27 color=#5f9ea0 size=2 face="Courier New"><FONT color=#5f9ea0 size=2   
    28 face="Courier New"><FONT color=#5f9ea0 size=2   
    29 face="Courier New">ForEach-Object</B></FONT></FONT></FONT><FONT size=2   
    30 face="Courier New"><FONT size=2 face="Courier New"> {</P>  
    31 <P></FONT></FONT><FONT color=#0000ff size=2 face="Courier New"><FONT   
    32 color=#0000ff size=2 face="Courier New"><FONT color=#0000ff size=2   
    33 face="Courier New">if</FONT></FONT></FONT><FONT size=2 face="Courier New"><FONT   
    34 size=2 face="Courier New"> (</FONT></FONT><FONT color=#000080 size=2   
    35 face="Courier New"><FONT color=#000080 size=2 face="Courier New"><FONT   
    36 color=#000080 size=2 face="Courier New">$_</FONT></FONT></FONT><FONT size=2   
    37 face="Courier New"><FONT size=2 face="Courier New">.Default)</P>  
    38 <P>{</P>  
    39 <P></FONT></FONT><FONT color=#000080 size=2 face="Courier New"><FONT   
    40 color=#000080 size=2 face="Courier New"><FONT color=#000080 size=2   
    41 face="Courier New">$_</FONT></FONT></FONT><FONT size=2 face="Courier New"><FONT   
    42 size=2 face="Courier New">.ShareName </FONT></FONT><FONT color=#ff0000 size=2   
    43 face="Courier New"><FONT color=#ff0000 size=2 face="Courier New"><FONT   
    44 color=#ff0000 size=2 face="Courier New">=</FONT></FONT></FONT><FONT size=2   
    45 face="Courier New"> </FONT><FONT color=#800080 size=2 face="Courier New"><FONT   
    46 color=#800080 size=2 face="Courier New"><FONT color=#800080 size=2   
    47 face="Courier New">$UserName</P>  
    48 <P></FONT></FONT></FONT><FONT size=2 face="Courier New"><FONT size=2   
    49 face="Courier New">&nbsp;</P>  
    50 <P></FONT></FONT><FONT color=#000080 size=2 face="Courier New"><FONT   
    51 color=#000080 size=2 face="Courier New"><FONT color=#000080 size=2   
    52 face="Courier New">$_</FONT></FONT></FONT><FONT size=2 face="Courier New"><FONT   
    53 size=2 face="Courier New">.Shared </FONT></FONT><FONT color=#ff0000 size=2   
    54 face="Courier New"><FONT color=#ff0000 size=2 face="Courier New"><FONT   
    55 color=#ff0000 size=2 face="Courier New">=</FONT></FONT></FONT><FONT size=2   
    56 face="Courier New"> </FONT><FONT color=#0000ff size=2 face="Courier New"><FONT   
    57 color=#0000ff size=2 face="Courier New"><FONT color=#0000ff size=2   
    58 face="Courier New">$True</P>  
    59 <P></FONT></FONT></FONT><FONT size=2 face="Courier New"><FONT size=2   
    60 face="Courier New">&nbsp;</P>  
    61 <P></FONT></FONT><FONT color=#000080 size=2 face="Courier New"><FONT   
    62 color=#000080 size=2 face="Courier New"><FONT color=#000080 size=2   
    63 face="Courier New">$_</FONT></FONT></FONT><FONT size=2 face="Courier New"><FONT   
    64 size=2 face="Courier New">.Put()</P>  
    65 <P></FONT></FONT><FONT color=#800080 size=2 face="Courier New"><FONT   
    66 color=#800080 size=2 face="Courier New"><FONT color=#800080 size=2   
    67 face="Courier New">$WshNetwok</FONT></FONT></FONT><FONT size=2   
    68 face="Courier New"><FONT size=2   
    69 face="Courier New">.AddPrinterConnection(</FONT></FONT><FONT color=#800000   
    70 size=2 face="Courier New"><FONT color=#800000 size=2 face="Courier New"><FONT   
    71 color=#800000 size=2 face="Courier New">"LPT2"</FONT></FONT></FONT><FONT size=2   
    72 face="Courier New"><FONT size=2 face="Courier New">, </FONT></FONT><FONT   
    73 color=#800000 size=2 face="Courier New"><FONT color=#800000 size=2   
    74 face="Courier New"><FONT color=#800000 size=2   
    75 face="Courier New">"\\"</FONT></FONT></FONT><FONT size=2 face="Courier New">   
    76 </FONT><FONT color=#ff0000 size=2 face="Courier New"><FONT color=#ff0000 size=2   
    77 face="Courier New"><FONT color=#ff0000 size=2   
    78 face="Courier New">+</FONT></FONT></FONT><FONT size=2 face="Courier New">   
    79 </FONT><FONT color=#800080 size=2 face="Courier New"><FONT color=#800080 size=2   
    80 face="Courier New"><FONT color=#800080 size=2   
    81 face="Courier New">$ComputerName</FONT></FONT></FONT><FONT size=2   
    82 face="Courier New"> </FONT><FONT color=#ff0000 size=2 face="Courier New"><FONT   
    83 color=#ff0000 size=2 face="Courier New"><FONT color=#ff0000 size=2   
    84 face="Courier New">+</FONT></FONT></FONT><FONT size=2 face="Courier New">   
    85 </FONT><FONT color=#800000 size=2 face="Courier New"><FONT color=#800000 size=2   
    86 face="Courier New"><FONT color=#800000 size=2   
    87 face="Courier New">"\"</FONT></FONT></FONT><FONT size=2 face="Courier New">   
    88 </FONT><FONT color=#ff0000 size=2 face="Courier New"><FONT color=#ff0000 size=2   
    89 face="Courier New"><FONT color=#ff0000 size=2   
    90 face="Courier New">+</FONT></FONT></FONT><FONT size=2 face="Courier New">   
    91 </FONT><FONT color=#800080 size=2 face="Courier New"><FONT color=#800080 size=2   
    92 face="Courier New"><FONT color=#800080 size=2   
    93 face="Courier New">$UserName</FONT></FONT></FONT><FONT size=2   
    94 face="Courier New"><FONT size=2 face="Courier New">)</P>  
    95 <P></FONT></FONT><FONT color=#0000ff size=2 face="Courier New"><FONT   
    96 color=#0000ff size=2 face="Courier New"><FONT color=#0000ff size=2   
    97 face="Courier New">break</P>  
    98 <P></FONT></FONT></FONT><FONT size=2 face="Courier New"><FONT size=2   
    99 face="Courier New">&nbsp;</P>  
    100 <P>}</P>  
    101 <P>}</P></FONT></FONT> 

    ЗЫ Странно, как-то редактор работает, ну да ладно

    29 января 2009 г. 9:29