如果powershell中日期为-lt值的语句不能正确计算年份



我已经使用这个脚本大约一年了,似乎任何年份为22的值都不会被视为大于当前年份21……我的格式是否不正确?csv文件只是一个用户名,格式为MM/DD/YY。由于日期为明年,脚本的特定部分不起作用:如果($today-lt$EndDate(。。。相对而言,似乎可以工作数月或数天,但不能工作数年?

在我的测试文件中,我有一个用户的日期是2022年3月1日,脚本说日期已经结束(意味着今天的$enddate值不小于明年的$enddate值(

有指针吗?

$Import_csv = Import-Csv -Path "C:tempnamesanddates.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似乎可以在没有干预的情况下正确导入日期,然后比较就可以了。但是-如果我离开-格式MM/dd/yy";在代码中,小于比较仍然失败。这两个变量都显示为带有|%gettype的datetime,但它仍然表示01/03/22比今天的日期要短。

我把我的代码改成了下面的代码,现在它似乎可以正常工作了——;格式";选项是进行-lt比较的原因。

$Import_csv = Import-Csv -Path "C:tempnamesanddates.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"

正如其他人所提到的,这里的问题是将日期对象($today(与字符串($EndDate(进行比较

你需要按照修改它

Import_csv = Import-Csv -Path "C:tempnamesanddates.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
# use date entered from file
EndDate   = Get-Date $_.date
Write-Host "Current User:" $UserDN
Write-Host "End Date in file: $($EndDate.toString("MM/dd/yy"))"
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"

作为字符串,这是有意义的。要做的一件事是,在比较中,左侧是日期时间类型,右侧将自动转换。

$today = Get-Date  # 12/24/21
$today | % gettype
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DateTime                                 System.ValueType

$today -lt '01/03/22'
True

通常人们使用这样的日期字符串,可以进行排序:

Get-Date -format yyyy/MM/dd
2021/12/24

最新更新