将今天的日期与 CSV 中的信息进行比较。如果匹配,执行命令
Compare today's date against information from a CSV. If matching, execute command
我有一个脚本要求 Username
和 DateRemove (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"
) 的 字符串 表示,因为格式变化和精度不够。
我有一个脚本要求 Username
和 DateRemove (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"
) 的 字符串 表示,因为格式变化和精度不够。