使用PowerShell脚本查找过去的日期

时间:2018-07-18 11:58:36

标签: powershell date

我目前正在使用PowerShell脚本来审核Active Directory用户并查找具有过期日期的用户。日期以“ MM / dd / yyyy”格式存储在人力资源部门的CSV文件中。我正在尝试编写一个脚本,将今天的日期与CSV文件中的日期进行比较。如果CSV中的日期已超过当前日期,则需要禁用该用户。

例如:

$today = getdate -format "MM/dd/yyyy"

$expiration = $_.'Expiration Date'

if ($today -ge $expiration) {*disable user*} else {*expiration date not 
expired*}

此方法给我的数据不准确。我认为Powershell会将日期读取为常规数字,而不是月/日/年。有人知道解决此问题的正确方法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

简而言之,您正在比较两个字符串值,而不是两个datetime对象。

使用格式开关指示Get-Date返回字符串值。 您希望将其保留为[datetime]对象以可靠地进行比较。

要获取当前日期时间,可以使用[datetime] :: now或简单地获取日期(无参数)

要从CSV投射数据,只需使用[datetime] $($。'到期日期')

答案 1 :(得分:0)

您需要做的第一件事是以所需的格式解析文字字符串对象中的csv日期。

Import-Csv .\Values.csv | 
ForEach-Object {
$time = $_.'Scheduled Time'
$_.'Scheduled Time' = ("{0:HH:mm:ss,fff}" -f ([datetime]([timespan]::fromseconds($time / 1000)).Ticks));$_
} | 
Export-Csv '.\Values.csv' -NoTypeInformation

立即使用逻辑:

$Expired_Date = [DateTime]::ParseExact($_.'expration date', "dd/MM/yyyy", $null) 

如果日期大于当前日期,请禁用广告用户

$Current_Date = Get-Date -format "MM/dd/yyyy"

注意:如果您有用户列表,则应使用 foreach 循环来迭代每个用户,并在循环内进行校验和。

希望有帮助。