Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows NT/2000/2003 (http://forum.oszone.net/forumdisplay.php?f=5)
-   -   [решено] Сетевые принтеры. (http://forum.oszone.net/showthread.php?t=299052)

KatAst 27-04-2015 21:37 2501532

Сетевые принтеры.
 
Здравствуйте. Есть ли простой способ сменить ip-адрес "server" в "\\server\printer" при помощи командной строки?

\\192.168.1.5\hp5505 = \\10.20.1.5\hp5505

Заранее спасибо.

Blast 27-04-2015 21:43 2501537

Посмотрите здесь: Добавление принтера без вмешательства пользователя в Windows. Можете попробовать последовательное выполнение команд по удалению существующего принтера и добавлению нового.

KatAst 27-04-2015 22:04 2501547

Blast, смущает необходимость указания и установки драйверов...необходима универсальность. Предположим, получу имя компьютера, наименование принтера...а драйвера...хм, может есть другие варианты? Может в реестре какое-нибудь значение сменить? Хотелось бы каким-нибудь bat-ником производить замену. Если есть такая возможность.

KatAst 28-04-2015 15:24 2501810

Blast, нашёл такой сценарий. Что Вы о нём думаете? как ему можно передавать параметры имени старого и нового сервера для каждого принтера?

код
Цитата:


'Автор - Randy Foster
'Адрес электронной почты - rfoster_2000@excite.com
'MCSE NT4, 2000
'MCSA 2003
'MCDBA SQL7, SQL2000
'CCNA

'Этот сценарий успешно применяется в сценариях регистрации. При запуске на рабочей станции
' он обрабатывает все принтеры, установленные для текущего зарегистрированного
' пользователя. Если принтеры связаны со старым сервером, то они будут удалены,
' а затем сопоставлены новому серверу. Сценарий также пытается обнаружить
' принтер по умолчанию, чтобы отменить назначение, если данный принтер предстоит
' переместить.

'Примечание: все принтеры должны существовать на новом сервере, прежде чем будет
'запущен этот сценарий. В противном случае принтер будет просто удален из
'профиля пользователя, и сценарий не сможет вновь подключить принтеры.
' "Print Migrator" -- утилита из набора ресурсов Windows 2000 и
' Windows 2003. С ее помощью можно создать все принтеры
' на новом сервере, сохранив все их параметры, в том числе
' настройки безопасности очереди печати. Учтите, что если выполнить поиск
' принтеров, то в течение некоторого времени будут видны дублированные
' принтеры, по одному на каждом сервере.

' Этот метод был использован для перемещения более 100 принтеров с одного сервера на другой
' с последующим запуском сценария как сценария регистрации в групповой политике.
' Он выполнялся несколько дней, чтобы его запустили и пользователи,
' которые не завершают свой сеанс ежедневно. Все профили пользователей
' в компании были обновлены незаметно для сотрудников. Затем все принтеры
' были удалены со старого сервера.
' Примечание: сценарий не выполняется при дистанционном управлении через терминальные службы или SMS.

Option Explicit
Dim from_sv, to_sv, PrinterPath, PrinterName, DefaultPrinterName,
DefaultPrinter
Dim DefaultPrinterServer, SetDefault, key
Dim spoint, Loop_Counter
Dim WshNet, WshShell
Dim WS_Printers
DefaultPrinterName = ""
spoint = 0
SetDefault = 0
set WshShell = CreateObject("WScript.shell")

from_sv = "cosrv" 'Имя старого сервера.
to_sv = "co-data-01" 'Имя нового сервера.

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

On Error Resume Next
key = "HKCUSoftwareMicrosoftWindows NTCurrentVersionWindowsDevice"
DefaultPrinter = LCase(WshShell.RegRead (key))
If Err.Number <> 0 Then
DefaultPrinterName = ""
else

'Если чтение реестра выполнено успешно, то производится разбор имени принтера, чтобы
' впоследствии сравнить его с каждым принтером и назначить верный принтер
' по умолчанию, если один из них совпадает с прочитанным из реестра.

spoint = instr(3,DefaultPrinter,"")+1
DefaultPrinterServer = left(DefaultPrinter,spoint-2)
if DefaultPrinterServer = from_sv then
DefaultPrinterName = mid(DefaultPrinter,spoint,len(DefaultPrinter)-spoint+1)
end if
end if
Set WshNet = CreateObject("WScript.Network")
Set WS_Printers = WshNet.EnumPrinterConnections

'Шаг должен быть 2, так как только четные числа являются именем сервера и общего ресурса
' очереди печати. Нечетные числа -- имена принтеров.

For Loop_Counter = 0 To WS_Printers.Count - 1 Step 2

'Не забудьте + 1, чтобы получить полный путь, то есть .. ваш_серверваш_принтер.

PrinterPath = lcase(WS_Printers(Loop_Counter + 1))

'Нужно работать столько с сетевыми принтерами, сопоставленными с исходным
' сервером, поэтому проверяем "ваш_сервер".

if LEFT(PrinterPath,len(from_sv)) = from_sv then

'Теперь нужно выполнить разбор пути принтера, чтобы получить имя принтера.
spoint = instr(3,PrinterPath,"")+1
PrinterName = mid(PrinterPath,spoint,len(PrinterPath)-spoint+1)

'Удаляем старое соединение с принтером,

WshNet.RemovePrinterConnection from_sv+""+PrinterName

'а затем создаем новое.
WshNet.AddWindowsPrinterConnection to_sv+""+PrinterName

'Если этот принтер совпадает с принтером по умолчанию, полученным из реестра, то
' назначаем его принтером по умолчанию.

if DefaultPrinterName = PrinterName then
WshNet.SetDefaultPrinter to_sv+""+PrinterName
end if
end if
Next
Set WS_Printers = Nothing
Set WshNet = Nothing
Set WshShell = Nothing

Iska 28-04-2015 15:34 2501818

Цитата:

Цитата KatAst
нашёл такой сценарий. Что Вы о нём думаете? »

Думаю, Вы потеряли часть содержимого из кода при его копировании из источника. Либо же, он был в таком виде и там, где Вы его брали.

Чтение реестра и разбор полученной строки для определения принтера по умолчанию вместо использования Wbem также не сильно радуют.

KatAst 29-04-2015 17:31 2502262

Iska, сегодня решил что-нибудь состряпать в свободное время...как получится...просьба сильно не ругаться и указать на ошибки:

bat

for /f "Skip=1 tokens=4 delims=. " %%i In ('WMIC Printer Where default^=TRUE Get ServerName^') do set ipprint=%%i

if %ipprint% lss 1 exit

for /f "Skip=1 delims=" %%i In ('WMIC Printer Where default^=TRUE Get ShareName^') do set nprint=\\10.20.1.%ipprint%\%%i && goto 1

:1

%windir%\system32\cscript.exe instpr.vbs //nologo //b %nprint%


vbs

if wscript.Arguments.Count=0 then
WScript.Quit

else
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = wscript.Arguments(0)
WshNetwork.AddWindowsPrinterConnection PrinterPath
WshNetwork.SetDefaultPrinter PrinterPath

End if

WScript.Quit


P.S.: Наверно, бессмысленно было добавлять в vbs оператор ЕСЛИ...но так,на всякий...

KatAst 02-05-2015 02:47 2502975

Сработает ли через групповую политику?

upd: C некоторыми исправлениями, работает.


Время: 00:42.

Время: 00:42.
© OSzone.net 2001-