将今天的日期与 CSV 中的信息进行比较。如果匹配,执行命令

Compare today's date against information from a CSV. If matching, execute command

我有一个脚本要求 UsernameDateRemove (MM/DD/YYYY)。此输入导出到一个 config.CSV 文件,带有 -Append 函数并且 CSV 格式为 Username,DateAdd,DateRemove.

我想为 运行 创建第二个 PS 文件作为每日计划任务。这是我迷路的地方,希望得到帮助...

我想引用这个 config.CSV 并将 DateRemove 与当前日期进行比较,如果有匹配我想采用 Username 并执行“Remove-ADGroupMember -Identity GroupName -Members $User",如果没有匹配,我希望它什么也不做。

尝试使用单个 PS 脚本创建 "removal" 作业,但这失败了,并且在我的计划任务中使用了变量作为参数。更不用说它会创建 100 个任务调度程序作业。这使我得到了一个 PS 文件用于用户输入和一个文件用于引用 "source" 文件的计划作业。

$User = Read-Host -Prompt 'Enter the username you want to add to group'
if ($User) {
    Write-Host "$User will be added to the group"
} else {
    Write-Warning -Message "We need a username to run this script"
}
Add-ADGroupMember -Identity Group -Members $User

$Date = Read-Host -Prompt 'Enter removal date'
if ($Date) { 
    Write-Host "$User will be removed from group on $Date"
} else {
    Write-Warning -Message "We need a date to run this script"
}
[PSCustomObject]@{
    Username = $User
    DateAdd  = Get-Date -Format g
    DateRemove = $Date
} | Export-Csv -Path C:\config.csv -Append -NoTypeInformation -Encoding ASCII

$Date = Get-Date
$Config = Import-Csv C:\config.csv
Foreach($DateRemove in $Config) {
$DateRemove = $DateRemove.Date
if "$DateRemove" -eq $Date 

现在我很困惑..

我假设您正在寻找类似以下的内容:

$today = [datetime]::Today
Import-Csv C:\config.csv | ForEach-Object {
  if ([datetime] $_.DateRemove -eq $today) {
    Remove-ADGroupMember -Identity $group -Members $_.Username 
  }
}

请注意,组信息不是您在问题中创建的 CSV 的一部分,因此我假设它存储在此处的变量 $group 中。

[datetime]::Today returns 今天午夜的日期(当天的 开始 ),即 没有时间 - day component谢谢,LotPings. 而且,考虑到从 CSV 文件 ([datetime] $_.DateRemove) 中读取的日期也不会有, -eq 比较按预期工作。

通常,避免比较时间戳 ("$DateRemove") 的 字符串 表示,因为格式变化和精度不够。