0
Morello

Скрипт

Рекомендуемые сообщения

Ребят кто шарит в скриптах и подобных тонкостях. Комп на винде 8.1. К нему по USB подключен принтер, он расшарен. Соответственно на нем может печатать много кто. Иногда случается так, что во время печати кем-то по сети, пользователь компа забывает об этом и вырубает свой комп и печать встает. Нужно сделать так, чтобы при выключении компа либо выдавалось предупреждение, что выключение компа невозможно, ибо в очереди печати есть задания, либо, чтобы хотя бы просто при каждом выключении было сообщение проверь принтер...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Такое есть на серверных OS: выдаётся вопрос о причине перезагрузки... На 8.1 - если только использовать программы оптимизации.

Если несколько ПК, то лучше поставить принт-сервер (USB over Ethernet) или подключить через роутер с портом USB.

 

Могу продать такой: TP-Link TL-PS310U. Новый в наличии, в плёнке.

Если нужен - пишите в ЛС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Плюсую за принт-сервер.

 

Вот вариант скрипта на vbs. Частично сожрано с интернета (даже почти полностью :-))

 

Dim strComputer
dim wmiNS
dim wmiQuery
dim objWMIService
dim colItems
dim objItem
Dim intTotalJobs
Dim intTotalPages
Dim intMaxPrintJob
 
strComputer = "."
wmiNS = "\root\cimv2"
wmiQuery = "Select * from win32_PrintJob"
Set objWMIService = GetObject("winmgmts:\\" _
    & strComputer & wmiNS)
Set colItems = objWMIService.ExecQuery(wmiQuery)
 
If colItems.count = 0 Then
    Set a = CreateObject("WScript.Shell")
    a.run "shutdown.exe -s -t 60"
Else
    WSCript.Echo "Очередь заданий не пуста"
End If

 

 

Чуть не дописал - выключать комп нужно именно с него.

Можно чуть переделать и положить в "Shutdown script" - тогда не важно как выключать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Такое есть на серверных OS: выдаётся вопрос о причине перезагрузки... На 8.1 - если только использовать программы оптимизации.

Если несколько ПК, то лучше поставить принт-сервер (USB over Ethernet) или подключить через роутер с портом USB.

 

Могу продать такой: TP-Link TL-PS310U. Новый в наличии, в плёнке.

Если нужен - пишите в ЛС.

 

Сеть полностью Wi-Fi, поэтому такая штучка не очень подойдет. Так то и роутер есть с USB портом и принт-сервером, но они слабоваты, часто тупит и печатает с задержками, иногда большими, даже текст. А если послать что-то увесистое растровое, то вообще караул. Поэтому было решено повесить принтер на комп, который это все хорошо переваривает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Dim strComputer

dim wmiNS

dim wmiQuery

dim objWMIService

dim colItems

dim objItem

Dim intTotalJobs

Dim intTotalPages

Dim intMaxPrintJob

 

strComputer = "."

wmiNS = "\root\cimv2"

wmiQuery = "Select * from win32_PrintJob"

Set objWMIService = GetObject("winmgmts:\\" _

    & strComputer & wmiNS)

Set colItems = objWMIService.ExecQuery(wmiQuery)

 

If colItems.count = 0 Then

    Set a = CreateObject("WScript.Shell")

    a.run "shutdown.exe -s -t 60"

Else

    WSCript.Echo "Очередь заданий не пуста"

End If

 

 

Чуть не дописал - выключать комп нужно именно с него.

Можно чуть переделать и положить в "Shutdown script" - тогда не важно как выключать.

Т.е. просто в батник засунуть это? И как положить в Shutdown script? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сеть полностью Wi-Fi, поэтому такая штучка не очень подойдет. Так то и роутер есть с USB портом и принт-сервером, но они слабоваты, часто тупит и печатает с задержками, иногда большими, даже текст. А если послать что-то увесистое растровое, то вообще караул. Поэтому было решено повесить принтер на комп, который это все хорошо переваривает.

Принт-сервер (USB over Ethernet)  решит эту проблему. Просто воткните его в тот роутер, он же с портами RG-45 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Т.е. просто в батник засунуть это? И как положить в Shutdown script? :)

Не - не в батник, в файлик с расширением .vbs.

При запуске, если задания есть - он покажет сообщение. Если нету - погасит комп (в данном случае через 60 сек.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Принт-сервер (USB over Ethernet)  решит эту проблему. Просто воткните его в тот роутер, он же с портами RG-45 ?

Может и решит, но принтер и роутер далеко друг от друга, вместе их поставить не вариант, принтер большой а3.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не - не в батник, в файлик с расширением .vbs.

При запуске, если задания есть - он покажет сообщение. Если нету - погасит комп (в данном случае через 60 сек.)

Попробовал, что-то он постоянно пишет очередь задний не пуста, хотя она пуста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Только выключать комп под двойному щелчку на этот

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробовал, что-то он постоянно пишет очередь задний не пуста, хотя она пуста.

Принтер один? может их несколько и висит в очереди что-то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так же попробуй запустить от имени администратора.

На win 7 работает! Восьмерки под рукой нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Принтер один? может их несколько и висит в очереди что-то?

Принтера 3, но они все без работы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если так, то что пишет?

 

strComputer = "."
wmiNS = "\root\cimv2"
wmiQuery = "Select * from win32_PrintJob"
Set objWMIService = GetObject("winmgmts:\\" _
    & strComputer & wmiNS)
Set colItems = objWMIService.ExecQuery(wmiQuery)
 
If colItems.count = 0 Then
    
Else
    for each PrintJob in colItems
         WScript.Echo PrintJob.Name & vbCr & PrintJob.JobId
    next
    WSCript.Echo "Очередь заданий не пуста"
End If

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если так, то что пишет?

 

strComputer = "."

wmiNS = "\root\cimv2"

wmiQuery = "Select * from win32_PrintJob"

Set objWMIService = GetObject("winmgmts:\\" _

    & strComputer & wmiNS)

Set colItems = objWMIService.ExecQuery(wmiQuery)

 

If colItems.count = 0 Then

    

Else

    for each PrintJob in colItems

         WScript.Echo PrintJob.Name & vbCr & PrintJob.JobId

    next

    WSCript.Echo "Очередь заданий не пуста"

End If

Трижды выводит на экран сообщение с названием одного и того же принтера, но под разными драйверами и в конце "очередь заданий не пуста".

6697777.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если зайти в устройства и принтеры, то там в очередях печати пусто? Есть варик подкоючиться по teamviever?

Если есть, то в личку координаты киньте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если зайти в устройства и принтеры, то там в очередях печати пусто? Есть варик подкоючиться по teamviever?

Если есть, то в личку координаты киньте.

Очереди печати точно нет. Может можно переписать скрипт, чтобы на конкретном одном принтере проверялось условие? Дело в том, что этот комп также удаленно подключен к другим принтерам на других компах, и если на них кто-то будет печатать, то соответственно это будет отображаться в очереди печати на всех компах в сети у кого есть этот принтер  и соотвественно человек просто не сможет вырубить свой комп...)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
0