Wiktor
Wiktor

Reputation: 631

PowerShell Comparing Date issue

I created a small scrip that have do to a couple of thinks.

The problem is that comparing is not working correctly. I tried do recognise date that is older than 30 days and do something but i see that comparison not always work. sometimes it does not recognize that date is less then - 30 days from current day Script below

$DateMaxTime = (Get-date).AddDays(-30)
$DateFormatMaxTime = Get-Date $DateMaxTime  -Format dd/MM/yyyy
$getData = get-ADUser -Filter * -Properties * -SearchBase "OU=Disabled,OU=Control,OU=x,OU=x,DC=x,DC=x,DC=x" `
|where {$_.Description -like "LEFT*"} |select name,samaccountname,description


Foreach ($Data IN $getData){
$DataPart = $null
$DataPart=$Data.description
$DatePart= $DataPart.substring(5,10)
$FinalDate = [datetime]::ParseExact($DatePart,'dd/MM/yyyy',$null) 
$FinalDateFormat = Get-Date $FinalDate -Format dd/MM/yyyy

If ($FinalDateFormat -lt $DateFormatMaxTime  ){ Write-Host "$($Data.samaccountname), $($Data.description) moved to deleteMe" }
else{ Write-Host "$($Data.samaccountname), $($Data.description) still in disabled" }

}

Below output shows me the wrong results (as example i did it for one user - >

enter image description here

Based on this logic the value $FinalDateFormat that hold date -> 31-12-2018 is less then value $DateFormatMaxTime that hold this date -> 25-06-2019 but it still applies else statement ...

I am not sure why, i did something wrong with date conversion ?

Upvotes: 2

Views: 1182

Answers (1)

js2010
js2010

Reputation: 27428

I put the comments as the answer:

I would compare the datetime versions of the dates rather than the string versions.

If ($FinalDate -lt $DateMaxTime)

Running

get-date -format 

makes them strings.

$finaldate.gettype(); $datemaxtime.gettype() 

shows the types. They are [datetime], not [string] like the other two.

Upvotes: 2

Related Questions