2016-10-27 3 views
-2

У меня есть сценарий PowerShell:Как узнать, является ли Windows spooler empy, из .bat?

$objPrintQueues = Get-WmiObject Win32_PerfFormattedData_Spooler_PrintQueue | Select Jobs 
    $queuesCounter=0 
    $queuesDetector=0 
    foreach($queue in $objPrintQueues) { $queuesCounter=$queuesCounter+$queue.Jobs } 
    if ($queuesCounter > 0) { $queuesDetector=1 } 
    echo $queuesDetector 

Он обнаруживает, есть ли какие-то рабочие места в очереди печати (в спулере) или принтеры свободны. Мне нужна такая же функциональность из .bat (пакетного) файла. Является ли это возможным?

+0

Я не думаю, что это возможно с использованием чистого пакетного сценария; единственная идея, которую я имею, это «wmic PrintJob», но я не знаю, как результат может быть полезен для вашей задачи ... Что вы узнали до сих пор? – aschipfl

+0

Я знаю, что может быть несколько способов SNMP, но применимо ли это для локальных принтеров? И я знаю, что API печати Spooler имеет функцию EnumJobs, но я не знаю, могу ли работать с диспетчером печати или нет. И я не могу найти четкие примеры: все примеры касаются остановки, очистки, запуска и перезапуска буферизации, а не того, как проверить пустоту. – Natalia

+0

Вы имеете в виду [tag: batch-file], правильно? обратите внимание, что [tag: bash] - это нечто совершенно другое ... – aschipfl

ответ

0

Это зависит от того, зачем вам это нужно в файле .bat, если это потому, что программа, которую вы используете для вызова программного обеспечения, поддерживает только файлы .bat, а не файлы .ps1, тогда вы можете просто написать .bat который запускает powershell.exe и вызывает ваш скрипт. Если это связано с тем, что вам запрещено запускать PowerShell в системах, в которых вы работаете с политиками безопасности, чем это будет значительно сложнее, если вы не можете убедить своих сотрудников безопасности разрешить запуск подписанных скриптов. Вероятно, это возможно с помощью сценариев WMI, но по этому счету я могу указать только на ресурсы MicroSoft на то, как создать этот тип кода - https://technet.microsoft.com/en-us/library/ee156560.aspx. Надеюсь, что это поможет.

+0

Спасибо за ответ, Майк. Да, речь идет о проблемах безопасности. Если мы хотим запускать скрипты, сначала нужно выполнить команду «Set-ExecutionPolicy Unrestricted» И это будет очень неудобно для наших клиентов проекта. Сценарий Bash может решить эту проблему, но сложнее написать такой bash. – Natalia

+0

так есть причина, по которой вы не можете использовать подписание кода? неограниченные заботы о клиентах, но часто они удобны с установкой политики выполнения на remotesigned. Кроме того, если это то, что регулярно выполняется в фоновом режиме, вы всегда можете создать учетную запись службы и использовать свойство -scope для set-executionpolicy, чтобы ограничить неограниченный доступ к сценарию для этой единственной учетной записи или если это используется только в одноразовой ситуации, вы можете либо использовать область -process, чтобы только отключить исполняемую политику для выполняемого процесса, либо просто вставить код в ISE и запустить оттуда без сохранения. –

+0

«bash» - «партия» в моем предыдущем комментарии, извините. – Natalia

 Смежные вопросы

  • Нет связанных вопросов^_^