我需要根据电子邮件地址更新多个用户的到期日期。不幸的是,我现在无法正常工作,因此我首先将电子邮件地址转换为samAccountname,然后根据samAccountName设置了有效日期。毫无疑问,我真的不知道如何将这两个代码连接到一个脚本中。您能否建议我应该如何连接它们?谢谢。
Import-Module activedirectory
$users = Get-Content C:\Scripts\test.txt
$users | ForEach-Object {
Get-ADUser -Filter "samAccountName -eq '$_'" -properties samaccountname | Select samaccountname
} | Export-CSV C:\Scripts\test.csv" -NoTypeInformation -Encoding UTF8
Import-CSV "C:\Scripts\test.csv" | ForEach-Object {
$usr = get-aduser $_.samAccountName |Select samAccountName
Set-ADAccountExpiration -Identity $usr.samAccountName -DateTime '21/09/2018' -Verbose
}
答案 0 :(得分:0)
我希望我能理解您要达到的目标,您拥有包含用户电子邮件和到期日期的CSV文件。并且您想使用此信息来更新用户的到期日期。
让我们假设您在CSV中具有以下标头,“用户电子邮件”和“用户到期日期”。因此,当您将CSV文件导入变量时,您将拥有一个包含该信息的PS自定义对象。可以说我们使用$ Users变量。
PS C:\> $users = Import-Csv -Path C:\Users\user\Desktop\users.csv
PS C:\> $users
User Email User expiration date
---------- --------------------
contact@saggiehaim.net 24/09/2018
info@saggiehaim.net 20/09/2018
admin@saggiehaim.net 28/09/2018
现在我们可以运行一个for循环,找到用户并设置到期日期。我正在做的是查询广告并询问它的EmailAddress属性,然后根据用户电子邮件进行过滤,当我们找到对象时,将其通过管道传递给set-ADAccountExpiration
foreach ($user in $users) {
$UserEmail = $user.'User Email'
Get-ADUser -Properties EmailAddress -filter "EmailAddress -eq $useremail" | Set-ADAccountExpiration -DateTime $user.'User expiration date' -Verbose
}
注意事项:
1。此脚本取决于您在EmailAddress属性中拥有用户电子邮件地址的假设
2。到期日期以与您的窗口相同的格式存储,如果不是,则必须进行转换。
3。如果列表很大,我建议首先从活动目录中获取所有用户,然后再从该列表中查找用户,而不是一遍又一遍地查询LDAP
在进行生产之前始终进行测试!!!也许我不知道,这是完全错误的;)
我希望我能对您有所帮助。对不起,英语不好。