Установить название на основе сотрудника

Я написал сценарий, в котором хочу прочитать файл CSV, а также определить идентификатор сотрудника и установить заголовок пользователя на основе идентификатора сотрудника. У меня проблемы с скриптом, зацикливающим все имена samaccount при каждом запуске через CSV.

$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

1 ответ

Исходя из вашего примера, кажется, что вы задаетесь вопросом, как эффективно выполнить оператор If. TheIncorrigible1 указал в комментариях, что вызов Get-ADUser в foreach крайне неэффективен. Вы можете вызвать Get-AdUser один раз и направить вывод в "If", которое ищет Contains против свойства EmployeeID.

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

Но когда я прочитал полный пост, я увидел, что вы хотите изменить заголовок в AD, чтобы он соответствовал заголовку в CSV-файле. Diffrence вместо вместо, если мы перейдем к оператору foreach-object, поместим AD-Users в переменную с именем $Users, а затем сделаем инструкцию where для переменной CSV. В этот момент мы установим заголовок с помощью 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)"}
} 
Другие вопросы по тегам