Powershell - 用于更改 AD 用户到期日期的滚动脚本
Powershell - Rolling script to change AD user expiration dates
我正在寻找一个用于即时修改 AD 帐户到期日期的脚本。我在下面编写的脚本大部分都可以工作,但并不能完全按照我想要的方式工作(我是一个 Powershell 菜鸟)。
我制作了一个滚动脚本,要求输入用户名,然后是新的到期日期,然后显示已更改的日期,然后重新开始。问题是,如果我输入 05/07/2021,例如,它将 AD 中的到期日期设置为 04/07/2021 午夜,但脚本报告日期已更改为 05/07/2021。理想情况下,我希望将其更改为 2021 年 7 月 5 日午夜,但让脚本将更改日期报告为 2021 年 7 月 5 日,而不是 2021 年 7 月 6 日。
我想通过这样做将输入日期向前滚动 24 小时:
[datetime]$AD_User_date = Read-Host "Enter a new expiry date, in the format DD/MM/YYYY"
$AD_User_date_2 = $AD_User_date.AddHours(24)
Set-ADAccountExpiration -Identity $AD_User -DateTime $AD_User_date_2
但这会将日期格式更改为美国,因此输入 05/07/2021 会将帐户到期日期更改为 07/05/2021。真可惜。
我目前的代码是超级基础的,我可能遗漏了一个明显的方法,请看一下,让我知道哪里出错了:
Clear-Host
$continue = $true
while ($continue){
write-host "AD Account Date Changer"
$AD_User = Read-Host "Enter username"
$AD_User = $AD_User.Trim()
$AD_User_date = Read-Host "Enter a new expiry date, in the format DD/MM/YYYY"
Set-ADAccountExpiration -Identity $AD_User -DateTime $AD_User_date
$AD_User_date_collect = Get-ADUser -Identity $AD_User -Properties AccountExpirationDate | select -ExpandProperty AccountExpirationDate
$AD_User_date_collect_2 = $AD_User_date_collect.ToString("dd-MM-yyyy")
Write-Host "New account expiration date is $AD_User_date_collect_2"
Write-Host ""
}
提前致谢。
您可能没有您认为的问题。
如果你这样做:
Set-ADAccountExpiration -Identity $AD_User -DateTime '05/07/2021'
然后
Get-ADUser -Identity $AD_User -Properties AccountExpirationDate
到期日期将显示为 05/07/2021 00:00:00,即 5 日的开始。如果您查看 AD 用户和计算机,它将显示 04/07/2021,但是标题清楚地显示 "End of:",使很明显该帐户将在 4 日全天活跃:
综上所述,这是您的脚本,其中包含一些日期验证:
Clear-Host
$continue = $true
while ($continue){
write-host "AD Account Date Changer"
$AD_User = Read-Host "Enter username"
$AD_User = $AD_User.Trim()
$AD_User_date = new-object datetime
do{
$Entered_Date= Read-Host "Enter a new expiry date, in the format DD/MM/YYYY"
$result = [datetime]::tryparseexact($Entered_Date,'dd/MM/yyyy',[cultureinfo]("en-GB"), [globalization.datetimestyles]("None"),[ref]$AD_User_date)
if(!$result){write-host 'Invalid date entered!'}
}until($result)
try{
Set-ADAccountExpiration -Identity $AD_User -DateTime $AD_User_date.AddHours(24)
Write-Host "New account expiration date is the end of $(($AD_User_date).toString('dd/MM/yyyy'))"
}catch{
Write-Host "Unable to set account expiry: $_"
}
Write-Host ""
}
我正在寻找一个用于即时修改 AD 帐户到期日期的脚本。我在下面编写的脚本大部分都可以工作,但并不能完全按照我想要的方式工作(我是一个 Powershell 菜鸟)。
我制作了一个滚动脚本,要求输入用户名,然后是新的到期日期,然后显示已更改的日期,然后重新开始。问题是,如果我输入 05/07/2021,例如,它将 AD 中的到期日期设置为 04/07/2021 午夜,但脚本报告日期已更改为 05/07/2021。理想情况下,我希望将其更改为 2021 年 7 月 5 日午夜,但让脚本将更改日期报告为 2021 年 7 月 5 日,而不是 2021 年 7 月 6 日。
我想通过这样做将输入日期向前滚动 24 小时:
[datetime]$AD_User_date = Read-Host "Enter a new expiry date, in the format DD/MM/YYYY"
$AD_User_date_2 = $AD_User_date.AddHours(24)
Set-ADAccountExpiration -Identity $AD_User -DateTime $AD_User_date_2
但这会将日期格式更改为美国,因此输入 05/07/2021 会将帐户到期日期更改为 07/05/2021。真可惜。
我目前的代码是超级基础的,我可能遗漏了一个明显的方法,请看一下,让我知道哪里出错了:
Clear-Host
$continue = $true
while ($continue){
write-host "AD Account Date Changer"
$AD_User = Read-Host "Enter username"
$AD_User = $AD_User.Trim()
$AD_User_date = Read-Host "Enter a new expiry date, in the format DD/MM/YYYY"
Set-ADAccountExpiration -Identity $AD_User -DateTime $AD_User_date
$AD_User_date_collect = Get-ADUser -Identity $AD_User -Properties AccountExpirationDate | select -ExpandProperty AccountExpirationDate
$AD_User_date_collect_2 = $AD_User_date_collect.ToString("dd-MM-yyyy")
Write-Host "New account expiration date is $AD_User_date_collect_2"
Write-Host ""
}
提前致谢。
您可能没有您认为的问题。
如果你这样做:
Set-ADAccountExpiration -Identity $AD_User -DateTime '05/07/2021'
然后
Get-ADUser -Identity $AD_User -Properties AccountExpirationDate
到期日期将显示为 05/07/2021 00:00:00,即 5 日的开始。如果您查看 AD 用户和计算机,它将显示 04/07/2021,但是标题清楚地显示 "End of:",使很明显该帐户将在 4 日全天活跃:
综上所述,这是您的脚本,其中包含一些日期验证:
Clear-Host
$continue = $true
while ($continue){
write-host "AD Account Date Changer"
$AD_User = Read-Host "Enter username"
$AD_User = $AD_User.Trim()
$AD_User_date = new-object datetime
do{
$Entered_Date= Read-Host "Enter a new expiry date, in the format DD/MM/YYYY"
$result = [datetime]::tryparseexact($Entered_Date,'dd/MM/yyyy',[cultureinfo]("en-GB"), [globalization.datetimestyles]("None"),[ref]$AD_User_date)
if(!$result){write-host 'Invalid date entered!'}
}until($result)
try{
Set-ADAccountExpiration -Identity $AD_User -DateTime $AD_User_date.AddHours(24)
Write-Host "New account expiration date is the end of $(($AD_User_date).toString('dd/MM/yyyy'))"
}catch{
Write-Host "Unable to set account expiry: $_"
}
Write-Host ""
}