Powershell WMI 获取超过 30 天的软件
Powershell WMI get software older than 30 days
我正在尝试从 WMI 中的 configMgr 获取所有超过 30 天的软件更新,我似乎无法弄清楚。
WMI 中的时间格式为:DateRevised:20121113180000.000000+000
我尝试了以下方法:
$Date30DaysAgo = (get-date).AddDays(-30).ToString("yyyymmddHHMMSS")
Get-WmiObject -Namespace "root\SMS\site_PS1" -Class SMS_SoftwareUpdate -ComputerName SRVSCCM01 -Filter {"DateRevised <= '$($Date30DaysAgo)%'"}
这是有效的,但我需要让它工作,-Filter
而不是 where-object
$Date30DaysAgo = (get-date).AddDays(-30)
Get-WmiObject -Namespace "root\SMS\site_PS1" -Class SMS_SoftwareUpdate -ComputerName SRVSCCM01 | Where-Object {$_.ConvertToDateTime($_.DateRevised) -lt $Date30DaysAgo }
这可能是因为我无法让时间转换和 WQL 小于运算符工作。有人可以指出我正确的方向吗?
您可以尝试使用以下方法将 $Date30DaysAgo 放入 WMI 时间戳格式:
$Date30DaysAgo = ([wmi]"").ConvertFromDateTime((get-date).AddDays(-30))
或使用
$Date30DaysAgo = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime(((get-date).AddDays(-30)).ToUniversalTime())
并在您的过滤器中使用该值
我正在尝试从 WMI 中的 configMgr 获取所有超过 30 天的软件更新,我似乎无法弄清楚。
WMI 中的时间格式为:DateRevised:20121113180000.000000+000
我尝试了以下方法:
$Date30DaysAgo = (get-date).AddDays(-30).ToString("yyyymmddHHMMSS")
Get-WmiObject -Namespace "root\SMS\site_PS1" -Class SMS_SoftwareUpdate -ComputerName SRVSCCM01 -Filter {"DateRevised <= '$($Date30DaysAgo)%'"}
这是有效的,但我需要让它工作,-Filter
而不是 where-object
$Date30DaysAgo = (get-date).AddDays(-30)
Get-WmiObject -Namespace "root\SMS\site_PS1" -Class SMS_SoftwareUpdate -ComputerName SRVSCCM01 | Where-Object {$_.ConvertToDateTime($_.DateRevised) -lt $Date30DaysAgo }
这可能是因为我无法让时间转换和 WQL 小于运算符工作。有人可以指出我正确的方向吗?
您可以尝试使用以下方法将 $Date30DaysAgo 放入 WMI 时间戳格式:
$Date30DaysAgo = ([wmi]"").ConvertFromDateTime((get-date).AddDays(-30))
或使用
$Date30DaysAgo = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime(((get-date).AddDays(-30)).ToUniversalTime())
并在您的过滤器中使用该值