我目前正在使用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会将日期读取为常规数字,而不是月/日/年。有人知道解决此问题的正确方法吗?
谢谢!
答案 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 循环来迭代每个用户,并在循环内进行校验和。
希望有帮助。