1

Тема: VBS: Перевод принтера из Offline в Online

Коллеги, приветствую !
По своей работе частенько сталкиваюсь с тем, что пользователи кривыми ручками переводят принтер в режим Offline, т.е. "Автономная работа" и потом кричат что принтер в состоянии "не подключен", провода все проверили - на месте, но он ничё не печатает.
Вот по этому поводу нацарапал следующий скрипт, который переводит принтер в "Оперативный режим", надеюсь кому-нибудь пригодится...

Set Shell = CreateObject("Shell.Application")
Set objFolder = Shell.NameSpace(4)
For each printer in objFolder.Items
If objFolder.GetDetailsOf(printer, 2)="Не подключен" then ' если принтер в режиме "Автономная работа"
printer.InvokeVerbEx("&Использовать принтер в оперативном режиме")
end if
Next
Времени не хватает... :-(

2

Re: VBS: Перевод принтера из Offline в Online

Немного модифицировал, учёл состояние приостановленной печати и комбинацию с автономным состоянием...

Set Shell = CreateObject("Shell.Application")
Set objFolder = Shell.NameSpace(4)
For each printer in objFolder.Items

If InstrRev(objFolder.GetDetailsOf(printer, 2),"Не подключен")<>0 then ' если принтер в режиме "Автономная работа"
printer.InvokeVerbEx("&Использовать принтер в оперативном режиме")
end if

If InstrRev(objFolder.GetDetailsOf(printer, 2),"Приостановлена")<>0 then ' если принтер в режиме "Приостановленой печати"
printer.InvokeVerbEx("Возобновить &печать")
end if

Next
Времени не хватает... :-(

3

Re: VBS: Перевод принтера из Offline в Online

При помещении скрипта в Коллекцию желательно, как минимум, приводить его к читабельному виду: «Each», «In», «Then», «End If»; указать вложенность синтаксических конструкций табуляцией или пробелами. Такие слова, как «ничё», «нацарапал» — лучше не употреблять в Коллекции. Я взял на себя смелость сие поправить.

4 (изменено: GreenRain, 2016-02-07 17:41:26)

Re: VBS: Перевод принтера из Offline в Online

Усовершенствовал скрипт возобновления принтеров.
1) Добавлена совместимость с Windows 7 (метод DoIt )
2) Добавлен пропуск:
- не-принтера "Установка принтера";
- виртуальных PDF-принтеров;
- виртуальных Microsoft-принтеров;
- виртуального принтера APS-печать.
3) Добавлен вывод сообщений для пользователя.

Set Shell = CreateObject("Shell.Application")
Set objFolder = Shell.NameSpace(4)
 
For Each printer In objFolder.Items
	if printer<>"Установка принтера" And InStr(printer,"Microsoft")=0 And InStr(UCase(printer),"PDF")=0 Then
		a=true
		wscript.echo chr(10)+chr(13)+"Принтер "+printer+ " :"
		If InstrRev(objFolder.GetDetailsOf(printer, 2), "Не подключен") <> 0 OR Instr(objFolder.GetDetailsOf(printer, 2), "Отключен") > 0 Then ' если принтер в режиме "Автономная работа"
			For Each verb in printer.verbs
				If InStr(verb.Name,"оперативн")>0 Then verb.DoIt
			Next
			printer.InvokeVerbEx("&Использовать принтер в оперативном режиме")
			if InstrRev(objFolder.GetDetailsOf(printer, 2), "Не подключен") <> 0 OR Instr(objFolder.GetDetailsOf(printer, 2), "Отключен") > 0 Then
				wscript.echo "ОШИБКА: в оперативный режим"
			Else
				wscript.echo "OK: в оперативный режим"
			End If
			a=false
		End If
     
		If Instr(objFolder.GetDetailsOf(printer, 2), "Приостановлен") > 0 AND InStr(UCase(printer),"APS")=0 Then ' если принтер в режиме "Приостановленой печати"
			For Each verb in printer.verbs
				If InStr(verb.Name,"озобновить")>0 Then verb.DoIt
			Next
        		printer.InvokeVerbEx("В&озобновить печать")
        		printer.InvokeVerbEx("Возобновить &печать")
			a=false
			If Instr(objFolder.GetDetailsOf(printer, 2), "Приостановлен") > 0 AND InStr(UCase(printer),"APS")=0 Then ' если принтер в режиме "Приостановленой печати"
				wscript.echo "ОШИБКА: возобновление"
			Else
				wscript.echo "OK: возобновление"
			End If
		End If
		If a Then wscript.echo "OK"
	End If
Next

Идея с методом DoIt позаимствована отсюда
https://www.autoitscript.com/forum/topi … view-item/

Запуск скрипта

CScript.exe /E:VBScript Start_Printers.vbs
Post's attachments

Start_Printers.vbs 1.58 kb, 3 downloads since 2016-02-07 

You don't have the permssions to download the attachments of this post.

5

Re: VBS: Перевод принтера из Offline в Online

А управление принтерами через WMI разве не удобнее ?

MSDN

Я к тому, что глаголы (Verbs) работают с учётом языка системы. На иностранной версии Windows такой код видимо работать не будет.

А wmi вроде надёжнее ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !