Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помогите подштриховать bat (printui.dll,PrintUIEntry)

Ответить
Настройки темы
CMD/BAT - [решено] Помогите подштриховать bat (printui.dll,PrintUIEntry)

Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


В домене на каждой машине имеются принтеры clp1 clp2 clp3 clp4 hp199 hp200 (установлены по IP)
на некоторых установлен Canon (LBP2900 локально) либо clp5 (тот же Canon только переименован).

наваял bat файл

читать дальше »

://cmdow @ /hid /min
://@echo off

:// на каждой машине имеются принтеры clp1 clp2 clp3 clp4 hp199 hp200 (по IP) на некоторых установлен
Canon (локально) либо clp5 (тот же Canon только переименован)

:// Удаляем все возможные имеющиеся сетевые принтеры.
rundll32 printui.dll,PrintUIEntry /dn /q /n\\it2_996801\Canon
rundll32 printui.dll,PrintUIEntry /dn /q /n\\zgb_996801\Canon
rundll32 printui.dll,PrintUIEntry /dn /q /n\\bkass_996801\Canon
rundll32 printui.dll,PrintUIEntry /dn /q /n\\zdgm_996801\Canon
rundll32 printui.dll,PrintUIEntry /dn /q /n\\zpek_996801\Canon
rundll32 printui.dll,PrintUIEntry /dn /q /n\\sspr_996801\Canon
rundll32 printui.dll,PrintUIEntry /dn /q /n\\zs2_996801\clp5
rundll32 printui.dll,PrintUIEntry /dn /q /n\\sb1_996801\Canon
rundll32 printui.dll,PrintUIEntry /dn /q /n\\zhoz_996801\Canon
rundll32 printui.dll,PrintUIEntry /dn /q /n\\gi_996801\Canon

:// если имя компа = xxx то идем туда то
if %computername%==IT1_996801 goto it2_996801
if %computername%==IT2_996801 goto root
if %computername%==BKASS_996801 goto root
if %computername%==ZGB_996801 goto root
if %computername%==PB_996801 goto zgb_996801
if %computername%==BUHPR_996801 goto zgb_996801
if %computername%==SEMENOVA goto zgb_996801
if %computername%==BZP_996801 goto zgb_996801
if %computername%==GB_996801 goto zgb_996801
if %computername%==ZDGM_996801 goto root
if %computername%==ZDGM2_996801 goto zdgm_996801
if %computername%==DGM_996801 goto zdgm_996801
if %computername%==RAO2_996801 goto zdgm_996801
if %computername%==RAO1_996801 goto zdgm_996801
if %computername%==TR_996801 goto zdgm_996801
if %computername%==ZPEK_996801 goto root
if %computername%==SSPEK_996801 goto zpek_996801
if %computername%==SSPR_996801 goto root
if %computername%==ZPR_996801 goto sspr_996801
if %computername%==ZS2_996801 goto clp5
if %computername%==ZS1_996801 goto zs2_996801
if %computername%==NRKZ_996801 goto zs2_996801
if %computername%==SB1_996801 goto root
if %computername%==ZDGM1_996801 goto sb1_996801
if %computername%==ZHOZ_996801 goto root
if %computername%==GI_996801 goto root
if %computername%==ING_996801 goto gi_996801
if %computername%==MP_996801 goto hp199
if %computername%==SDEL_996801 goto hp199
if %computername%==MP_996801 goto hp199
if %computername%==SOP_996801 goto hp200
if %computername%==OP1_996801 goto hp200
if %computername%==OP2_996801 goto hp200
if %computername%==SSPR_996801 goto hp200
if %computername%==NSP_996801 goto hp200
if %computername%==STFAS_996801 goto hp200

goto end

:root
rundll32 printui.dll,PrintUIEntry /y /q /n\\%computername%\Canon

goto end

:hp199
rundll32 printui.dll,PrintUIEntry /y /q /n\\%computername%\hp199

goto end

:hp200
rundll32 printui.dll,PrintUIEntry /y /q /n\\%computername%\hp200

goto end

:clp5
rundll32 printui.dll,PrintUIEntry /y /q /n\\%computername%\clp5

goto end

:it2_996801
rundll32 printui.dll,PrintUIEntry /in /u /w /q /n\\it2_996801\Canon
rundll32 printui.dll,PrintUIEntry /y /q /n\\it2_996801\Canon

goto end

:zgb_996801
rundll32 printui.dll,PrintUIEntry /in /u /w /q /n\\zgb_996801\Canon
rundll32 printui.dll,PrintUIEntry /y /q /n\\zgb_996801\Canon

goto end

:zdgm_996801
rundll32 printui.dll,PrintUIEntry /in /u /w /q /n\\zdgm_996801\Canon
rundll32 printui.dll,PrintUIEntry /y /q /n\\zdgm_996801\Canon

goto end

:zpek_996801
rundll32 printui.dll,PrintUIEntry /in /u /w /q /n\\zpek_996801\Canon
rundll32 printui.dll,PrintUIEntry /y /q /n\\zpek_996801\Canon

goto end

:sspr_996801
rundll32 printui.dll,PrintUIEntry /in /u /w /q /n\\sspr_996801\Canon
rundll32 printui.dll,PrintUIEntry /y /q /n\\sspr_996801\Canon

goto end

:zs2_996801
rundll32 printui.dll,PrintUIEntry /in /u /w /q /n\\zs2_996801\clp5
rundll32 printui.dll,PrintUIEntry /y /q /n\\zs2_996801\clp5

goto end

:sb1_996801
rundll32 printui.dll,PrintUIEntry /in /u /w /q /n\\sb1_996801\Canon
rundll32 printui.dll,PrintUIEntry /y /q /n\\sb1_996801\Canon

goto end

:gi_996801
rundll32 printui.dll,PrintUIEntry /in /u /w /q /n\\gi_996801\Canon
rundll32 printui.dll,PrintUIEntry /y /q /n\\gi_996801\Canon

goto end

:end


вроде работает / Но смущает долгая отработка первого этапа bat ника .(удаление всех возможных сетевых принтеров)

Помогите отладить данный bat ник , что бы можно или как то проверять наличие сетевого принтера
с последующим его удалением или заменить перебор принтеров для удаления одной командой (только сетевых )

Отправлено: 12:15, 15-07-2009

 

Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Часть с удалением принтеров (извини, проверять у себя как-то неохота... )
можно попробовать распараллелить, запустив все копии printui.dll одновременно.
Список принтеров можно для красоты сунуть в одну строку и выбирать в цикле...

Код: Выделить весь код
set ToDel=it2_996801\Canon zgb_996801\Canon bkass_996801\Canon zdgm_996801\Canon zpek_996801\Canon sspr_996801\Canon zs2_996801\clp5 sb1_996801\Canon zhoz_996801\Canon gi_996801\Canon
:L01
for /F "tokens=1*" %%P in ("%ToDel%") do (
start rundll32 printui.dll,PrintUIEntry /dn /q /n\\%%P
set ToDel=%%Q
)
if not "%ToDel%"=="" Goto L01
Если поможет - попробуй также поступить и с проверками.

-------
Как сказало Дерево Дровосеку: "я - пень".

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:57, 15-07-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


NiOl, опробую , отпишу .

Отправлено: 14:58, 15-07-2009 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата batyaPS:
можно или как то проверять наличие сетевого принтера
с последующим его удалением или заменить перебор принтеров для удаления одной командой (только сетевых ) »
Код: Выделить весь код
For /F "Tokens=1,2 Skip=1" %%i In ('WMIC Printer Where Network^=TRUE Get ShareName^,ServerName^,WorkOffLine') Do rundll32 printui.dll,PrintUIEntry /dn /q /n%%i\%%j
З.Ы. а не проще включить компы в группы и проверять членство вместо перебора?.. чуть дольше, зато практичней
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:58, 15-07-2009 | #4


Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


Цитата amel27:
З.Ы. а не проще включить компы в группы и проверять членство вместо перебора?.. чуть дольше, зато практичней »

0. проще .
1. Нет доступа с контроллеру домена и групп. политике (есть головная компания, и мы, так сказать, с урезанными правами .) по этому что либо делать с группами , доменами и т.д. нам запрещено .
2. компы часто перемещаются относительно здания по этому жестко привязывать их к группам не льзя.

Цитата amel27:
For /F "Tokens=1,2 Skip=1" %%i In ('WMIC Printer Where Network^=TRUE Get ShareName^,ServerName^,WorkOffLine') Do rundll32 printui.dll,PrintUIEntry /dn /q /n%%i\%%j »
если честно не совсем понял строку и что она делает . если не трудно можно расшифровать
и подставить сразу те переменные которые мною используются домен допустим DUMM

Отправлено: 20:08, 15-07-2009 | #5


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


batyaPS,
1. понимаю, сами так работаем - нужны права на создание своих групп (в своем OU) и включение в них компов
2. не понимаю, при чем тут расположение... например, "OU01-hp200" - компы, кот.печатают на hp200; комп переехал - перекинул его в другую группу, скажем, "OU01-Canon" - сам скрипт при этом править не нужно

Цитата batyaPS:
не совсем понял строку и что она делает »
удаляет все сетевые принтеры, WMIC выводит параметры принтеров, которые затем используются в вызове printui.dll,PrintUIEntry:
Код: Выделить весь код
WMIC Printer Where Network=TRUE Get ShareName,ServerName

Отправлено: 02:56, 16-07-2009 | #6


Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


большое спасибо amel27 и NiOl, оба ваши варианты полностью рабочие .
с отличием в том , что один может удалять принтеры только заведомо принадлежащие к организации(или через список ) .

а второй может удалить все возможные принтеры сетевые .

Отправлено: 20:20, 17-07-2009 | #7


Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


обновлю тему .

ранее на машинах 2k
строка rundll32 printui.dll,PrintUIEntry /y /q /n\\%computername%\Canon
(устанавливает локальный принтер по умолчанию)
работало корректно.

сейчас перевел машины на XP и данная строка больше не отрабатывает у пользователей .
т.е. под администратором работает, а под пользователем нет .

причем строка rundll32 printui.dll,PrintUIEntry /in /u /w /q /n\\zpek_996801\Canon
(установка сетевого принтера)
проходит без проблем .

вывода ошибки в консоли нет . т.е. после выполнения команды делается перевод строки и все (как будто все выполнилось)

подскажите ... на что нужно дать права что бы у пользователей корректно отрабатывала строка
rundll32 printui.dll,PrintUIEntry /y /q /n\\%computername%\Canon

Отправлено: 20:33, 28-12-2010 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помогите подштриховать bat (printui.dll,PrintUIEntry)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Помогите с написанием bat файла для проверки запущенного процесса. Stranger404 Скриптовые языки администрирования Windows 17 17-08-2020 22:50
[решено] Помогите с написанием *.bat файла. systeman Хочу все знать 14 02-07-2015 15:37
[решено] Помогите написать BAT или ГП для пользователя. Ufo_log Программирование в *nix 2 29-10-2007 14:29
Любой язык - Как узнать из Bat-ника версию *.DLL, *.ax и т.п. Dilinjer Скриптовые языки администрирования Windows 11 31-08-2007 12:44
[решено] народ помогите с msgina.dll diga Microsoft Windows 2000/XP 6 26-06-2007 15:38




 
Переход