2016-10-27 2 views
-2

Ich habe ein Skript, Powershell:Wie zu wissen, ist Windows Spooler Empy, von .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 

Es erkennt, gibt es einige Jobs in der Druckwarteschlange (in Spooler) oder Drucker frei sind. Ich brauche die gleiche Funktionalität aus der .bat (Batch) -Datei. Ist es möglich?

+0

Ich glaube nicht, dass dies mit reinem Batch-Scripting möglich ist; die einzige Idee, die ich habe, ist "wmic PrintJob", aber ich weiß nicht, wie die Ausgabe für Ihre Aufgabe nützlich sein könnte ... Was haben Sie bisher herausgefunden? – aschipfl

+0

Ich weiß, dass es einige SNMP Möglichkeiten gibt, aber ist es für lokale Drucker anwendbar? Und ich weiß, dass Print Spooler API eine EnumJobs-Funktion hat, aber ich weiß nicht, kann Bash mit Print Spooler arbeiten oder nicht. Und ich kann keine klaren Beispiele finden: Alle Beispiele beziehen sich auf Stop, Löschen, Start und Neustart des Spoolers, nicht darauf, wie man nach Leerheit sucht. – Natalia

+0

Sie meinen [Tag: Batch-Datei], oder? beachte, dass [tag: bash] etwas völlig anderes ist ... – aschipfl

Antwort

0

Es hängt davon ab, warum Sie es in einer .bat-Datei benötigen, wenn das Programm, das Sie zum Aufrufen der Software verwenden, nur .bat-Dateien und keine .ps1-Dateien unterstützt, dann können Sie einfach eine .bat-Datei schreiben Dadurch wird powershell.exe ausgeführt und das Skript aufgerufen. Wenn Sie die Ausführung von PowerShell auf den Systemen, mit denen Sie arbeiten, aufgrund von Sicherheitsrichtlinien verhindern, wird dies erheblich schwieriger, vorausgesetzt, Sie können Ihre Sicherheitsleute nicht dazu verleiten, signierte Skripts auszuführen. Es ist wahrscheinlich möglich, über WMI-Skripting, aber auf diese Anzahl kann ich Sie nur auf die MicroSoft-Ressourcen verweisen, wie Sie diese Art von Code erstellen - https://technet.microsoft.com/en-us/library/ee156560.aspx. Hoffe das hilft ein bisschen.

+0

Vielen Dank für die Antwort, Mike. Ja, es geht um Sicherheitsprobleme. Wenn wir Skripte ausführen wollen, müssen wir zuerst den Befehl ausführen "Set-ExecutionPolicy Unrestricted" Und es wird sehr unangenehm für unsere Projektkunden. Bash-Skript kann dieses Problem lösen, aber es ist schwieriger, solche Bash zu schreiben. – Natalia

+0

Also gibt es einen Grund, warum Sie Code-Signing nicht verwenden können? Uneingeschränkte Sorgen Clients, aber oft sind sie in der Lage, die Ausführungsrichtlinie remotesigned zu setzen. Wenn dies regelmäßig im Hintergrund ausgeführt wird, können Sie immer ein Dienstkonto erstellen und mithilfe der Eigenschaft -scope von set-executionpolicy den uneingeschränkten Skriptzugriff auf dieses einzelne Konto beschränken oder nur einmal verwenden Situationen können Sie entweder den -process-Bereich verwenden, um nur die Ausführungsrichtlinie für den laufenden Prozess zu deaktivieren oder einfach den Code in ISE einfügen und von dort ohne zu speichern ausführen. –

+0

"Bash" ist "Batch" in meinem vorherigen Kommentar, sorry. – Natalia

Verwandte Themen