Powershell导入导出的文件

时间:2018-09-21 08:12:56

标签: active-directory powershell-ise

我需要根据电子邮件地址更新多个用户的到期日期。不幸的是,我现在无法正常工作,因此我首先将电子邮件地址转换为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
} 

1 个答案:

答案 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

在进行生产之前始终进行测试!!!也许我不知道,这是完全错误的;)

我希望我能对您有所帮助。对不起,英语不好。