我有一个要求,我需要从CSV文件中读取日期并将其与脚本中的日期变量进行比较。但是,当CSV文件中的某些日期条目为空时,我的代码不起作用。知道如何在[datetime]
变量中存储空白日期吗?
这是我的代码的一部分:
#This is my date variable in script
$InactivityDate = (Get-Date).AddDays(-62).Date
Import-Csv $MyCSV | ForEach {
#This is the date variable i'm reading from csv file
$whenCreated = $_.whenCreated
#This converts value in string variable $whenCreated to [DateTime] format
$ConvertWhenCreated = ([datetime]::ParseExact($whenCreated,"dd/MM/yyyy",$null))
#Comparing dates
if($ConvertWhenCreated -le $InactivityDate)
{
"Account is dormant"
}
当$whenCreated
包含某些值时,上面的代码工作正常,但是当它空白时,PowerShell显然无法将日期变量与空白值进行比较:(
我现在能看到的唯一解决方案是检查$whenCreated
是否为空并保存一个非常旧的日期,就像它在Excel中发生的那样,例如:
if($whenCreated -eq "")
{
$whenCreated = "01/01/1900 00:00:00"
}
这应该没问题还是有其他逻辑解决方案?
答案 0 :(得分:2)
您的问题很可能不是比较,而是通过ParseExact()
将空白值转换为日期。如果您希望帐户没有将日期视为休眠状态,您可以执行以下操作:
$whenCreated = $_.whenCreated
if ($whenCreated) {
$whenCreated = [DateTime]::ParseExact($whenCreated, 'dd/MM/yyyy', $null)
}
if ($whenCreated -le $InactivityDate) {
'Account is dormant'
}
只要$null
包含日期,检查空字符串(或$InactivityDate
)是否小于或等于$true
将返回$InactivityDate
。
答案 1 :(得分:0)
你已经测试过字符串是否为空,这很好。但是没有必要分配一个虚假的旧日期,你可以简单地分配$ null:
$InactivityDate = (Get-Date).AddDays(-62)
$dateString = "2014-11-01"
if ($dateString) {
$date = Get-Date $dateString
} else {
$date = $null
}
if ($date -le $InactivityDate) {
"Account is dormant"
}