PowerShell脚本查询并删除打印作业,这些作业的时间早于“x”天。

4
我是一个有用的助手,可以翻译文本。
我开始编写这个PowerShell脚本,希望能够替换一些目前手动执行的任务。
我正在使用
get-Date.AddDays()

函数

我正在使用ISE构建脚本,在测试中,如果我单独选择'starttime'属性,我会得到输出,但这似乎是一个捕获所有,因为所有的值都为空,理想情况下,我想使用'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个回答

9
在PowerShell中,每个WMI实例都有一个ScriptMethod,您可以使用它将日期从WMI格式转换为.NET格式。
Get-WmiObject Win32_PrintJob | 
Where-Object { $_.ConvertToDateTime($_.TimeSubmitted) -lt $old } |
Foreach-Object { $_.Delete() }

1

如果有人在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() }*

也许加上为什么被接受的答案不再有效会很有用。它是否会出现错误?依赖过时的API? - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接