PowerShell脚本用于查询和删除早于“x”天的打印作业

时间:2012-04-16 14:50:02

标签: powershell powershell-ise

我开始将这个PowerShell脚本放在一起,希望能够替换当前手动执行的一些任务

我正在使用

get-Date.AddDays()

功能

我正在使用ISE来构建脚本,在测试中我得到输出,如果我挑出'starttime'属性,但这似乎是一个全部因为值都是null,理想情况下我喜欢使用'timesubmitted'属性,但日期似乎输出奇怪,我认为没有正确读取,因为我的'timesubmitted'查询总是空的

如果您执行打开查询

,它将以此格式显示
20120416030836.778000-420

这是我到目前为止所拥有的。

忽视| 'format-table'函数就是这样我可以看到我是否得到了所需的输出

#Clears Old Print Jobs on Specified server

#Sets Execution Policy for Script to run
Set-ExecutionPolicy RemoteSigned -Force

#establishes variable for cutoff date
$d = Get-Date
$old = $d.AddDays(-4)

#Queries WMI and retrieves print jobs
Get-WmiObject -class win32_printjob -namespace "root\CIMV2" | where-object {$_.timesubmitted -lt
"$old"} | ft caption,document,jobid,jobstatus,owner,timesubmitted

2 个答案:

答案 0 :(得分:8)

在PowerShell中,每个WMI实例都有一个ScriptMethod,可用于将日期从WMI格式转换为.NET格式:

Get-WmiObject Win32_PrintJob | 
Where-Object { $_.ConvertToDateTime($_.TimeSubmitted) -lt $old } |
Foreach-Object { $_.Delete() }

答案 1 :(得分:0)

只是一个更新,以防有人在 2021 年寻找。

这个命令/语法在 2008 R2(PowerShell 2.0 版)中对我有用(我能够从这个页面和其他页面拼凑起来)。

查找超过 30 分钟的所有作业并删除它们:

Get-wmiobject win32_printjob 
| Where-Object {[System.Management.ManagementDateTimeConverter]::ToDateTime($_.TimeSubmitted) -lt (Get-Date).addminutes(-30)} 
| ForEach-Object { $_.delete() }*