Установить название на основе сотрудника
Я написал сценарий, в котором хочу прочитать файл 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)"}
}