Необходимо получить информацию о файле, прежде чем он будет напечатан с помощью PowerShell - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно получить имя и размер файла, который был отправлен на принтер.Поэтому мне нужно получить информацию об этом ПЕРЕД печатью файла.

Я пытался работать с файлами в 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 - это новая вещьдля меня и на данный момент я полностью потерян с этой задачей

1 Ответ

0 голосов
/ 27 ноября 2018

Если вы не знаете, когда запустить 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
...