powershell - 使用 powershell 获取超过 1 小时的打印作业
问题描述
我想搜索仍在队列中超过 1 小时的所有打印作业以及状态为错误/暂停的打印机。
我尝试了下面的代码,但没有得到正确的时差,结果中也没有显示节点名称。有人可以帮忙吗?
询问:
$old = get-date -Format 'MM/dd/yyyy HH:MM:ss tt'
$PrinterStatus=Get-Printer -ComputerName "Hgjyu-79ujk" | Get-Printjob | select
@{name="Name";expression={$_.printerName}} , @{name="Submitted Time";
expression={$_.SubmittedTime}} , jobstatus, NodeName , @{name="Document Name";
expression={$_.documentname}} ,@{n='TIme Difference';
e={[math]::Truncate(($_.old - $_.SubmittedTime).TotalHours)}} |
Where-Object {$_.jobstatus -ne "Normal" -or $_.SubmittedTime -gt (Get-Date).AddHours(-1) } |
Sort-Object -Property jobstatus -Descending
结果:
Submitted Time : 12/4/2020 7:36:30 PM
JobStatus : Error
NodeName :
Document Name : NewDoc
Difference : -17697523
解决方案
发布问题时,请使用代码块作为代码。
-Format
inGet-Date
返回一个字符串,因此您无法与之$old
比较$_.SubmittedTime
Get-PrintJob
返回一个MSFT_PrintJob,因此它不包含该NodeName
值。然而,它确实有一个PrinterName
属性。
例子
$CurrentTime = Get-Date
Get-Printer -ComputerName "Hgjyu-79ujk" |
Get-Printjob |
Where-Object {$_.jobstatus -ne "Normal" -and $_.SubmittedTime -gt (Get-Date).AddHours(-1) } | # You want -and here.
Select-Object @{name="Name";expression={$_.printerName}},
@{name="Submitted Time";expression={$_.SubmittedTime}},
jobstatus, PrinterName,
@{name="Document Name";expression={$_.documentname}},
@{n='Time Difference';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} |
Sort-Object -Property jobstatus -Descending
编辑
根据您的评论,如果NodeName
作为其中的一部分存在,Get-Printer
那么您可以这样做:
$CurrentTime = Get-Date
Get-Printer -ComputerName "Hgjyu-79ujk" | Foreach-Object {
$Printer = $_
$Printer | Get-Printjob |
Where-Object {$_.jobstatus -ne "Normal" -and $_.SubmittedTime -gt (Get-Date).AddHours(-1) } | # You want -and here.
Select-Object @{name="Name";expression={$_.printerName}},
@{name="Submitted Time";expression={$_.SubmittedTime}},
jobstatus, @{name="NodeName";expression={$Printer.NodeName}},
@{name="Document Name";expression={$_.documentname}},
@{n='Time Difference';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} |
Sort-Object -Property jobstatus -Descending
}
请注意,您在 PowerShell 中看到的输出可能会被重命名为带有NodeName
标签。MSFT_Printer对象通常不具有该属性。您可以通过运行以下命令来查看所有返回对象的属性来确定:
(Get-Printer)[0] | Format-List *
推荐阅读
- postgresql - 为什么 PostgreSQL 不使用三元索引
- angular - 与“this”绑定的验证器将 FromGroup 显示为未定义
- python - 使用请求和 BeautifulSoup 在页面上找不到元素
- javascript - 从远程位置加载伴随 Javascript 的资产
- html - 如何并排放置锚标签?
- php - 如何按另一个表的速率对数据进行排序
- tensorflow - 如何使用 fp16 和 fp32 训练模型进行推理?
- java - 第 1 行的跟踪无效?如何在java中修复行检查器
- symfony - Symfony 3.4 - 如何将 Swiftmailer 传递给事件监听器?
- javascript - 即使路径正确也找不到图像模块