我开始将这个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
答案 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() }*