Я новичок в PowerShell, и я пытаюсь обновить атрибуты AD с помощью PowerShell из файла .csv.

Ниже приведены строки в моем CSV-файле и атрибуты, которые я пытаюсь обновить.

Департамент> Департамент

Дивизион> Дивизион

Сервис> информация

EmployeeFullname (используется для идентификации объекта)

LineMangerFullname> менеджер

CostCentre> DepartmentNumber

Должность> название

Пока мне удалось обновить только атрибуты Department, Division, Title (Job Title) и Manager в Active Directory.

Я использую приведенный ниже сценарий, который успешно обновляет эти атрибуты.

$Users = Import-CSV C:\Users\user\Documents\CurrentWork\userlist.csv

ForEach ($User in $Users) {
    Get-ADUser -Filter * -property displayname | where {$_.displayname -eq $User.EmployeeFullName} | Set-ADUser -department $User.Department -Division $User.Division -Title $User.JobTitle -Manager $User.LineMangerFullname
}

Однако при добавлении info и departmentNumber в скрипт (см. ниже) происходит сбой:

"parameter name 'info' is ambiguous" and A parameter cannot be found that matches parameter name 'departmentNumber'
$Users = Import-CSV C:\Users\user\Documents\CurrentWork\userlist.csv

ForEach ($User in $Users) {
    Get-ADUser -Filter * -property displayname | where {$_.displayname -eq $User.EmployeeFullName} | Set-ADUser -department $User.Department -Division $User.Division -Title $User.JobTitle -Manager $User.LineMangerFullname -info $User.Service -departmentNumber $User.'Cost Centre'
}

Кто-нибудь знает, что я делаю не так, или как я могу их обновить, пожалуйста, а также как я могу экспортировать результаты, чтобы узнать, успешно ли обновление? действительно застрял здесь

1
bk993 12 Фев 2021 в 19:15

2 ответа

Лучший ответ

Set-ADUser не предоставляет все возможные атрибуты схемы AD в качестве параметров, только ограниченный набор общих пользовательских атрибутов - и атрибуты info (или "Примечания", как они отображаются в некоторых tools) не является одним из тех, для которых у него есть параметры.

Чтобы установить значение свойства, которое не имеет соответствующего параметра, используйте параметр (ы) -Replace или -Add, передав хеш-таблицу, описывающую обновление:

... |Set-ADUser -Replace @{ info = "new info value" }
0
Mathias R. Jessen 12 Фев 2021 в 16:31

Как уже отмечалось, свойство Manager может быть только одним из DistinguishedName, GUID, SID or SamAccountName для Set-AccountName. Очевидно, CSV ничего из этого не содержит, а $User.LineMangerFullname содержит полные имя и фамилию менеджера.

Для этого вам нужно использовать другой вызов Get-ADUser, чтобы получить допустимое свойство от этого менеджера.

Далее, как уже отмечал Матиас Р. Джессен в своем полезном ответе, не все атрибуты напрямую доступно в параметрах Set-ADUser, поэтому для некоторых вам придется использовать синтаксис -Replace @{property = value}.

Наконец, я бы рекомендовал использовать Splatting на командлетах, которые потенциально могут принимать множество параметров, чтобы код был чистым / поддерживаемым.

Пытаться

$Users = Import-CSV C:\Users\user\Documents\CurrentWork\userlist.csv

foreach ($User in $Users) {
    $adUser = Get-ADUser -Filter "DisplayName -eq '$($User.EmployeeFullName)'" -Properties DisplayName -ErrorAction SilentlyContinue
    if ($adUser) {
        # set up a Splatting Hashtable for the Set-ADUser cmdlet
        $userParams = @{
            Department = $User.Department
            Division   = $User.Division
            Title      = $User.JobTitle
        }
        $manager = Get-ADUser -Filter "Name -eq "$($User.LineMangerFullname) -ErrorAction SilentlyContinue
        # if we did find a manager, add property 'Manager' to the Hashtable
        if ($manager) { $userParams['Manager'] = $manager.DistinguishedName }

        # use the Hash to splat all known parameters to Set-ADUser
        $adUser | Set-ADUser $userParams
        # next , update the attributes that have no direct parameter in Set-ADUser
        $adUser | Set-ADUser -Replace @{ info = $User.Service; departmentNumber = $User.'Cost Centre' }
    }
    else {
        Write-Warning "User $($User.EmployeeFullName) could not be found"
    }
}
0
Theo 18 Фев 2021 в 13:16