2016-10-27 34 views
-2

我有一个PowerShell脚本:如何知道,是Windows后台处理程序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有一个EnumJobs函数,但我不知道,bash是否可以与打印后台处理程序一起工作。我找不到明确的例子:所有例子都是关于停止,清除,启动和重新启动后台处理程序,而不是如何检查是否为空。 – Natalia

+0

你的意思是[标签:批处理文件],对吧?请注意[tag:bash]是完全不同的... – aschipfl

回答

0

这种类型取决于你为什么需要它在.bat文件中,如果是因为你用来调用软件的程序只支持运行.bat文件而不是.ps1文件,那么你可以写一个.bat文件运行powershell.exe并调用您的脚本。假如你无法说服你的安全人员允许你运行已签名的脚本,那么由于你在安全策略下工作的系统上阻止你运行PowerShell而不是使用PowerShell将会非常困难。这很可能通过WMI脚本编写,但在这一点上,我只能指出您如何创建该类型代码的MicroSoft资源 - https://technet.microsoft.com/en-us/library/ee156560.aspx。希望有点帮助。

+0

谢谢你的回复,Mike。是的,这是关于安全问题。如果我们想运行脚本,我们首先必须执行命令 “Set-ExecutionPolicy Unrestricted” 对于我们的项目客户来说,这会非常不舒服。 Bash脚本可以解决这个问题,但编写这样的bash更加困难。 – Natalia

+0

所以有没有原因你不能使用代码签名?不受限制地担心客户,但往往他们很乐意将执行策略设置为remotesigned。另外,如果这是在后台定期运行的东西,则可以始终创建一个服务帐户并使用set-executionpolicy的-scope属性来限制对该单个帐户的无限制脚本访问,或者仅在一次性使用该帐户您可以使用-process作用域仅禁用正在运行的进程的执行策略,或者仅将代码粘贴到ISE中并从那里运行而不保存。 –

+0

“bash”在我以前的评论中是“批处理”,对不起。 – Natalia

相关问题