需要帮助理解PowerShell中的“Set-ADUser”

m1m5dgzv  于 2023-10-18  发布在  Shell
关注(0)|答案(2)|浏览(196)

我试图从包含电子邮件地址和职务的CSV文件更新Active Directory中的职务,但我遇到了一个问题,因为CSV文件不包含用户的“-Identity”,只包含他们的电子邮件地址。
这是我目前得到的:

$csv = Import-Csv -Path "C:\Folder\JobTitles.csv" 

ForEach ($item In $csv) 
{ 
   Set-ADUser -EmailAddress $item.Email -Title $item.Title
}

我遇到的问题是,当我运行这个命令时,它提示我输入每个用户的身份。我知道我应该用这个来代替:

Set-ADUser -Identity $item.SamAccountName -Title $item.Title

但这有个问题。在我们的广告中,一半的员工“用户登录名(Windows 2000之前)”使用“名首字母姓”格式,一半使用“名.姓”格式。从我在测试中看到的情况来看,这是-Identity正在从/查找的字段,但该信息不是我的CSV文件的一部分。
我的问题是,有没有一种方法可以让“Set-ADUser”只使用电子邮件地址作为唯一的用户标识符/身份?
谢谢!尼克

fivyi3re

fivyi3re1#

不完全是有一种低效的方法,使用电子邮件帐户名使用Get-ADUser获取用户对象,然后使用Set-ADUser修改对象:

$csv = Import-Csv -Path "C:\Folder\JobTitles.csv"

ForEach ($item In $csv) {
    Get-ADUser -Filter 'EmailAddress -like "$item.Email"' | Set-ADUser -Title $item.Title
}

我说“低效”是因为-Filter ing并不是真正的高性能-但是如果用户对象已经设置了电子邮件地址,它就可以工作。

chy5wohz

chy5wohz2#

mail在AD中不是唯一属性,所以你应该小心使用它。

foreach ($item in $importedItems) {
    $emailAddress = $item.emailAddress
    $newTitle = $item.Title
    try {
        $users = @( Get-ADUser -Filter "(mail -eq '$($emailAddress)')" -Properties @('title', 'mail') -ErrorAction Stop )
        
        if ($users.Count -gt 1) {
            throw "email is not unique!"
        }
        
        if ($users.Count -eq 0) {
            throw "email was not found!"
        }

        $user = $users[0]

        if ($user.Title -eq $newTitle) {
            Write-Warning "User $($user.mail) already have title `"$($user.Title)`". Skipping"
            continue
        }

        Set-ADUser -Identity $user -Title $newTitle -Confirm:$false -ErrorAction Stop
    } catch {
        Write-Warning "$($emailAddress): $($_.Exception.Message)"
    }
}

相关问题