2016-10-27 55 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

相關問題