根据 employeeid 设置标题

Set title based off employeeid

我写了一个脚本,我想读取一个 CSV 文件并对员工 ID 进行分级,并根据员工 ID 设置用户头衔。我在通过 CSV 循环每个 运行 上的所有 samaccount 名称的脚本时遇到问题。

$CSVFiles = Import-CSV "C:\T2\SetUserAttributes\EIDTitle.csv"

ForEach($CSVFile in $CSVFiles) { Get-ADUser -Filter * -Properties employeeid | ? {(($CSVFile.EmployeeID))} | Select SamAccountName -ExpandProperty SamAccountName | Sort-Object SamAccountName }

这是 CSV 文件的样子

EmployeeID  Title
109216  Associate
109215  Vice President
108686  Vice President

根据您的示例,您似乎想知道如何有效地执行 If 语句。 TheIncorrigible1 在评论中指出,在 foreach 中调用 Get-ADUser 效率极低。您可以调用 Get-AdUser 一次并将输出通过管道传输到 "If",该 "If" 根据 EmployeeID 属性.

查找包含
$Titles = Import-CSV "C:\T2\SetUserAttributes\EIDTitle.csv"
Get-ADUser -Filter * -Properties employeeid | ?{
    $Titles.EmployeeID.Contains($_.EmployeeId)
}

但是当我阅读全文时 post 我看到您想要更改 AD 中的标题以对应于 CSV 文件中的标题。如果我们将转到 foreach-object 语句,将 AD-Users 放入名为 $Users 的 var 中,然后在 CSV 变量上执行 where 语句,则差异不是 a。那时我们将使用 Set-ADUser 设置标题并将信息输出到控制台。

$Titles = Import-CSV "C:\T2\SetUserAttributes\EIDTitle.csv"
Get-ADUser -Filter * -Properties employeeid | %{
    $User = $_
    $Titles | Where{$_.EmployeeID -eq $USer.EmployeeID} | Set-ADUser $User -Title $_.Title | %{Write-Output "$($User.SamAccountName) : $($_.Title)"}
}