PowerShell — массовое изменение атрибутов для списка пользователей

#powershell

#powershell

Вопрос:

У меня есть CSV-файл, содержащий список пользователей (samaccountname) в столбце A. В дополнительных столбцах у меня есть дополнительные значения атрибутов, которые я хотел бы установить для каждого из этих пользователей:

«ОФИС» в столбце B, «Отдел» в столбце C и компания в столбце D:

введите описание изображения здесь

Пожалуйста, помогите собрать правильный синтаксис Powershell.

До сих пор я пробовал следующее:

 Import-Module Activedirectory
$Attribcsv=Import-csv "D:powershellADuserinformationSetUserAttributes.csv"
ForEach ($User in $Attribcsv)
{
Set-ADUser $User.samaccountname -department $._Department
}
  

С другим csv с двумя столбцами: sAMAcountName, Отдел

Но я получил сообщение об ошибке:

введите описание изображения здесь

Комментарии:

1. Пожалуйста, покажите, что вы пробовали

2. отредактировано с помощью кода, который я пробовал.

Ответ №1:

Вы можете попробовать следующим образом (сначала получить пользователя, используя его имя учетной записи SAM с Get-ADUser помощью, а затем передать Set-ADUser , чтобы установить атрибут):

 Import-Module Activedirectory
$Attribcsv=Import-csv "D:powershellADuserinformationSetUserAttributes.csv"
ForEach ($User in $Attribcsv)
{
Get-ADUser -Identity $User.Users | Set-ADUser -department $._Department
}
  

Комментарии:

1. Привет, Хасан, я получаю точно такую же ошибку, о которой я упоминал, когда пробовал это сделать. «» Get-ADUser : не удается проверить аргумент для параметра «Identity». Аргумент равен null. Укажите допустимое значение для аргумента, а затем попробуйте выполнить команду еще раз «.»

2. Если столбец «Пользователи» — это имя вашей учетной записи SAM, попробуйте изменить

3. Пробовал также редактировать, та же ошибка. это очень странно, что я получаю эту ошибку и при использовании других csv / PowerShell, которые я использую.

4. Хорошо, я справился с этим, в CSV была проблема, я снова открыл ее и исправил. теперь у меня возникла другая проблема. для значения отдела у меня было другое значение, поэтому значение, которое я пытаюсь заменить этим значением, используя синтаксис now, не работает, есть ли синтаксис, который можно использовать для замены текущих значений?

Ответ №2:

Немного поздно для вечеринки, но лично я бы не стал использовать этот -Identity параметр здесь, потому что, если во входном CSV есть опечатки, скрипт вылетит.

Более щадящий вариант — использовать -Filter так:

 Import-Module Activedirectory -ErrorAction SilentlyContinue

$AttribCsv = Import-csv "D:powershellADuserinformationSetUserAttributes.csv" | ForEach-Object {
    $accountName = $_.Users  # make sure the header for this column is correct here!
    # now try and find a valid user object using Filter
    $user = Get-ADUser -Filter "SamAccountName -eq '$accountName'" -Properties Office, Company, Department -ErrorAction SilentlyContinue
    if ($user) {
        $user | Set-ADUser -Department $_.Department -Company $_.Company -Office $_.Office
        # or use -Replace:
        # $user | Set-ADUser -Replace @{Department = $_.Department; Company = $_.Company; Office = $_.Office}
    }
    else {
        Write-Warning "User with SamAccountName '$accountName' not found.."
    }
}
  

Имейте в виду, что если какое-либо из свойств имеет нулевое или пустое значение Set-ADUser , командлет вернет ошибку.
Проверьте свой входной CSV для этого.