首页 > 解决方案 > 根据 LastUpdatedStatusReport 日期有条件地从 WSUS 服务器中选择字段

问题描述

我正在使用 poshWSUS 2.3.1.6 模块并有如下查询:

& Get-PSWSUSClient | select @{name="Computer";expression={$($_.FullDomainName)}},@{name="LastUpdated";expression={$($_.LastReportedStatusTime)}} | export-csv -NoTypeInformation -append $FileOutput

我的问题是对于某些计算机没有报告状态时间,所以LastReportedStatusTime等于1/1/0001 12:00:00 AM.我想要的字段:LastSyncTime对于那些计算机。基本上我需要类似的东西

expression= if (LastReportedStatusTime > '1/1/0001 12:00:00 AM') then {$($_.LastReportedStatusTime)}} else {$($_.LastSyncTime)}}  

但我找不到正确的语法。如果您能提供帮助,我将不胜感激。

标签: powershellpowershell-5.0poshwsus

解决方案


您可以将字符串转换为日期时间:

if ([datetime]$_.LastReportedStatusTime -gt [datetime]'1/1/0001 12:00:00 AM') {
    $_.LastReportedStatusTime
} else {
    $_.LastSyncTime
}

我在这里假设 $_.LastReportedStatusTime 返回的不是日期时间本身,而是一个字符串。它应该只将 if 表达式的一侧转换为 datetime,因为 powershell 也应该尝试转换另一部分。但我喜欢在这种转换中明确。

或者对于基于字符串的版本,检查它们是否匹配:

if ($_.LastReportedStatusTime -eq '1/1/0001 12:00:00 AM') {
    $_.LastSyncTime
} else {
    $_.LastReportedStatusTime
}

没有要测试的 WSUS,但对于日期时间版本,这应该可以完成工作:

& Get-PSWSUSClient | select @{name="Computer";expression={$_.FullDomainName}},@{name="LastUpdated";expression={if ([datetime]$_.LastReportedStatusTime -gt [datetime]"1/1/0001 12:00:00 AM") {$_.LastReportedStatusTime} else {$_.LastSyncTime}}} | export-csv -NoTypeInformation -append $FileOutput

推荐阅读