Здравствуйте. Есть ли простой способ сменить ip-адрес "server" в "\\server\printer" при помощи командной строки?
\\192.168.1.5\hp5505 = \\10.20.1.5\hp5505
Заранее спасибо.
Посмотрите здесь: Добавление принтера без вмешательства пользователя в Windows (https://support.microsoft.com/en-us/kb/189105/ru). Можете попробовать последовательное выполнение команд по удалению существующего принтера и добавлению нового.
Blast, смущает необходимость указания и установки драйверов...необходима универсальность. Предположим, получу имя компьютера, наименование принтера...а драйвера...хм, может есть другие варианты? Может в реестре какое-нибудь значение сменить? Хотелось бы каким-нибудь bat-ником производить замену. Если есть такая возможность.
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
нашёл такой сценарий. Что Вы о нём думаете? »
Думаю, Вы потеряли часть содержимого из кода при его копировании из источника. Либо же, он был в таком виде и там, где Вы его брали.
Чтение реестра и разбор полученной строки для определения принтера по умолчанию вместо использования Wbem также не сильно радуют.
Iska, сегодня решил что-нибудь состряпать в свободное время...как получится...просьба сильно не ругаться и указать на ошибки:
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%
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 оператор ЕСЛИ...но так,на всякий...
Сработает ли через групповую политику?
upd: C некоторыми исправлениями, работает.
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.