So I was reading up on the AD Module filters. I found a thing, Microsoft usually says keep it simple. I found an over complex way of initializing a date variable. So what did the documentation suggest:
$date_net = new-object System.DateTime -ArgumentList @(2007,1,1,0,0,0)
Whoa.. Yes you can use .NET but if possible use Powershell cmdlets.
Do we have any cmdlet we can use? Get-Date
.
Get-Date
can be initialized with year, month and day.
$date_ps = Get-Date -Year 2007 -Month 1 -Date 1
That looks easier to read so it is better.
But are they the same.
And they aren’t.
So what is the difference?
Let’s convert it to the FileTime
structure.
PS C:\> $date_ps -eq $date_net
False
PS C:\> $date_ps.ToFileTime()
128120796000000001
PS C:\> $date_net.ToFileTime()
128120796000000000
Here we see that we get a 100-nanosecond difference.
I’m not really sure why.
But now we know that if you want the real 12am you can’t use Get-Date
.
As it will add a 100ns extra.
Bonus link to MSDN article for DateTime Structure.