【发布时间】:2022-01-25 06:30:07
【问题描述】:
我已经使用这个脚本大约一年了,似乎任何 22 年的值都没有被视为大于当前的 21 年...我的格式不正确吗? csv 文件只是一个用户名,MM/DD/YY 格式。由于日期是明年而不工作的脚本的特定部分是:if($today -lt $EndDate)... 相对而言似乎可以工作几个月和几天,但不能工作几年?
在我的测试文件中,我有一个用户的日期为 22 年 1 月 3 日,脚本说日期已经结束(这意味着 $today 不小于 $enddate 值,实际上是明年)
任何指针?
$Import_csv = Import-Csv -Path "C:\temp\namesanddates.csv"
# Get today's date
$today = Get-Date -format MM/dd/yy
# Begin import csv process
$Import_csv | ForEach-Object {
# Retrieve DN of User
$UserDN = (Get-ADUser -Identity $_.Name).distinguishedName
# Error check missing date - set to tomorrow
$EndDate = (Get-Date).AddDays(1).ToString("MM/dd/yy")
# Try to use date entered from file
$EndDate = (Get-Date $_.date).toString("MM/dd/yy")
Write-Host "Current User:" $UserDN
Write-Host "End Date in file:" $EndDate
if($today -lt $EndDate){
Write-Host "User affected:" $UserDN
Write-Host "Moving Accounts....." $UserDN
}else{
Write-Output "User account date ended for:" $UserDN
}
}
Write-Host "Script Complete"
更新:感谢大家的反馈 - 通过取出 .toString 转换并排除任何格式 - Powershell 似乎在没有干预的情况下正确导入日期,然后比较有效。但是 - 如果我在代码中保留“-format MM/dd/yy”,小于比较仍然失败。两个变量都显示为日期时间和 | % gettype - 但它仍然说 01/03/22 小于今天的日期。
我将我的代码更改为以下内容,它现在似乎可以正常工作 - 似乎“格式”选项是 -lt 比较的原因。
$Import_csv = Import-Csv -Path "C:\temp\namesanddates.csv"
# Get today's date
$today = Get-Date
# Begin import csv process
$Import_csv | ForEach-Object {
# Retrieve DN of User
$UserDN = (Get-ADUser -Identity $_.Name).distinguishedName
# Error check missing date - set to today
$EndDate = $today
# Try to use date entered from file
$EndDate = Get-Date $_.date
Write-Host "Current User:" $UserDN
Write-Host "End Date in file:" $EndDate
if($today -lt $EndDate){
Write-Host "User affected:" $UserDN
Write-Host "Moving Accounts....." $UserDN
}else{
Write-Output "User account date ended for:" $UserDN
}
}
Write-Host "Script Complete"
【问题讨论】:
-
当您执行 ToString 时,您将其转换为字符串,那么比较将是字符串比较,而不是日期比较。例如,字符串 2/1/21 将大于字符串 1/1/22。
-
始终使用
DateTime比较日期和时间 -
正如其他人指出的那样...... 除非绝对需要,否则不要比较日期字符串......相反,比较日期时间对象。
-
将所有日期转换为 [datetime] 类型。除非您有 ISO-8601、
yyyy-MM-dd格式的字符串,否则不要使用字符串。
标签: powershell date if-statement