0

我编写了一个脚本,我想读取一个 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
4

1 回答 1

1

根据您的示例,您似乎想知道如何有效地执行 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)
}

但是当我阅读完整的帖子时,我看到您想将 AD 中的标题更改为与 CSV 文件中的标题相对应。差异不是我们是否将转到 foreach-object 语句将 AD-Users 放入名为 $Users 的 var 中,然后对 CSV 变量执行 where 语句。此时,我们将使用 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)"}
} 
于 2018-07-30T14:56:14.667 回答