Powershell 根据LastUpdatedStatusReport日期有条件地从WSUS服务器选择字段

Powershell 根据LastUpdatedStatusReport日期有条件地从WSUS服务器选择字段,powershell,powershell-5.0,poshwsus,Powershell,Powershell 5.0,Poshwsus,我正在使用poshWSUS 2.3.1.6模块,有如下查询: & Get-PSWSUSClient | select @{name="Computer";expression={$($_.FullDomainName)}},@{name="LastUpdated";expression={$($_.LastReportedStatusTime)}} | export-csv -NoTypeInformation -append $FileOutput 我的问题是,对于某些计算机,没有报

我正在使用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)}}  

但是我找不到正确的语法。非常感谢您的帮助。

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

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可供测试,但对于datetime版本,这应该可以完成以下任务:

& 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