我需要获取已发送到打印机的文件的名称和大小。所以我需要在打印文件之前获取有关它的信息。
我曾尝试使用Windows \ System32 \ spool \ PRINTERS中的文件,但是即使暂停打印工作,我也无法从.SHD和.SPL文件中获取任何信息。
我开始使用Get-WmiObject -Class Win32_Printer寻找一些解决方案。 这是正确的方法吗?也许我应该使用某些特定方法或某些方法?
我尝试了这段代码,但是显示出一个错误
$comp = $(Get-WmiObject Win32_Computersystem).Name
if ( (Get-ChildItem C:\Windows\System32\spool\PRINTERS | Measure-Object).Count -ne 0)
{
Get-WmiObject -Class win32_service -filter 'name="spooler"' -ComputerName $comp | Invoke-WmiMethod -Name StopService | out-null
$name = $(Get-WmiObject Win32_PrintJob).Document
$size = $(Get-WmiObject Win32_PrintJob).Size
$time = $(Get-WmiObject Win32_PrintJob).StartTime
"$comp,$name,$size,$time" | Out-file C:\Scripts\PrintJobs.csv -Append
Set-Service spooler -ComputerName $comp -Status Running
}
怎么了?
PowerShell对我来说是新事物,现在我完全迷失了这项任务
答案 0 :(得分:1)
除非您知道何时运行Powershell,否则我看不到如何在发送打印作业之前“获得”此信息。您必须保持后台处理程序为“暂停”,然后在运行脚本时将其设置为“正在运行”,然后再次暂停它,直到下次运行脚本为止。
有一件事是“ Get-WmiObject Win32_PrintJob”很可能会返回所有当前假脱机作业的集合。因此您的代码应如下所示,以获取所需的信息:
$comp = $(Get-WmiObject Win32_Computersystem).Name
$jobs=Get-WmiObject Win32_PrintJob
$jobInfo = $jobs | ForEach-Object {"$comp,$($_.Document),$($_.Size),$($_.StartTime)"}
$jobInfo | Out-file C:\Scripts\PrintJobs.csv -Append