![]() |
Измение атрибутов в полльзователей в АД. Ошибки Operator Not supported
Подскажите как исправить ошибку. Делаю обновление атрибутов пользователей.
Код:
Import-Module ActiveDirectory |
Измените знак - в фильтре:
PS > [int][char]"-" -Символ, который сейчас в Filter и PowerShell его не воспринимает 8211 PS > [int][char]"-" - Символ который должен быть в Filter 45 Код:
(Get-ADuser -Filter {GivenName -eq $Name -and Surname -eq $Surname}).SamAccountName Код:
Get-ADuser -Filter {GivenName -eq $Name -and Surname -eq $Surname} | Set-ADUser -EmailAddress $Email -MobilePhone $Phone -Company $Organization -Title $JobTitle |
это ошибка первого варианта.
Get-ADUser : Переменная: "Name" обнаружена в выражении: $Name не имеет определения. строка:21 знак:21 + $Login = (Get-ADuser <<<< -Filter {GivenName -eq $Name -and Surname -eq $Surname}).SamAccountName #ищем юзера с заданным именем и фамилией и возвращаем его логин + CategoryInfo : InvalidArgument: (:) [Get-ADUser], ArgumentException + FullyQualifiedErrorId : Переменная: "Name" обнаружена в выражении: $Name не имеет определения.,Microsoft.ActiveDirectory.Management.Commands.GetADUser Set-ADUser : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды. строка:23 знак:11 + Set-ADUser <<<< $Login –EmailAddress $Email –MobilePhone $Phone –Company $Organization –Title $JobTitle + CategoryInfo : InvalidData: (:) [Set-ADUser], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADUser Это ошибка второго. Get-ADUser : Переменная: "Name" обнаружена в выражении: $Name не имеет определения. строка:21 знак:11 + Get-ADuser <<<< -Filter {GivenName -eq $Name -and Surname -eq $Surname} | Set-ADUser -EmailAddress $Email -MobilePhone $Phone -Company $Organization -Title $JobTitle + CategoryInfo : InvalidArgument: (:) [Get-ADUser], ArgumentException + FullyQualifiedErrorId : Переменная: "Name" обнаружена в выражении: $Name не имеет определения.,Microsoft.ActiveDirectory.Management.Commands.GetADUser |
Переменная: "Name" обнаружена в выражении: $Name не имеет определения. - Переменная $Name пустая, проблема в том что $CurrentUser.Name передает пустое значение. Проверяйте вывод:
Import-Csv -Delimiter ";" -Path "C:\AD\ad-import.csv" и Import-Csv -Delimiter ";" -Path "C:\AD\ad-import.csv" | Select Name PS. Файл C:\AD\ad-import.csv - должен быть в кодировке UTF8. |
Спасибо, помогло. А можно чтобы проверяло по значению cn.
|
Подскажите а как использовать функции в данном скрипте. Вроде Есть функция userset с параметром ($CurrentUser) и функция Provision с параметром ($user). Но с помощью функций не получается делать обновление атрибутов.
|
А можно чтобы проверяло по значению cn. - Можно, использовать фильтр по CN.
Get-ADuser -Filter {cn -eq $cn} Я не знаю, о каких функциях идет речь. Но функций userset,Provision - таких нет и не было. Обновление атрибутов происходит через командлет Set-ADUser . |
http://forum.oszone.net/post-2242418.html
Здесь используются функции. В Powershell вывел список функций. get-command -CommandType function |
Обновление атрибутов пользователей из csv работает. Подскажите как в этом же скрипте добавить перемещение пользователя в свой контейнер из csv!
|
Добавить, скажем, Path в скрипт - должно быть DistinguishedName (как пример для Users: CN=Users,DC=Contoso,DC=Com или OU: OU=MyTest,DC=Contoso,DC=Com)
Код:
$path = $CurrentUser.Path |
Import-Module ActiveDirectory
$Users = Import-Csv -Delimiter ";" -Path "C:\AD\ad-import5.csv" $path = "OU=123456,DC=point,DC=pro" Foreach ($CurrentUser in $Users) { $Name = $CurrentUser.Name $Surname = $CurrentUser.Surname $Email = $CurrentUser.EMail $Phone = $CurrentUser.Phone $Organization = $CurrentUser.Organization $JobTitle = $CurrentUser.JobTitle $path = $CurrentUser.Path $DistinguishedName = $CurrentUser.DistinguishedName $Login = Get-ADuser -Filter {GivenName -eq $Name -and Surname -eq $Surname} | Set-ADUser -EmailAddress $Email -MobilePhone $Phone -Company $Organization -Title $JobTitle | Move-ADObject -TargetPath $path } В csv поле path Я правильно понял? Ошибок нет и не переносит, только атрибуты правит. |
$path либо вручную указывать, либо в из csv. В одном месте должно быть, а не в 2.
$path = "OU=123456,DC=point,DC=pro" - 1 $path = $CurrentUser.Path - 2 И скопируйте повторно код, который я привел постом выше, а то видимо трудно с первого раза скопировать без ошибок. |
Спасибо работает. Просто хотел чтобы в csv путь писать конечный.
|
Еще вопрос. Получается что в csv для работы скрипта должны быть заполнены все поля. У меня некоторые пользователи не с полной информацией.
Set-ADUser : replace C:\AD\Мои скрипты\Тесты\test.ps1:37 знак:46 + Get-ADuser -Filter {cn -eq $cn} | Set-ADUser <<<< -MobilePhone $Phone -Company $Organization -Title $JobTitle -City $City -Department $Department -PassThru | Move-ADObject -TargetPath $path + CategoryInfo : InvalidOperation: (CN=last111 firs...DC=point,DC=pro:ADUser) [Set-ADUser], ADInvalidOperationException + FullyQualifiedErrorId : replace,Microsoft.ActiveDirectory.Management.Commands.SetADUser |
Пустые значения нельзя передавать, можно $null.
Код:
$prop = Write-Output EMail Phone Organization JobTitle |
Есть атрибут ipPhone - (IP-телефон). Никак не получается добавить его в изменение атрибутов.
|
Set-ADUser .... -Replace @{ipPhone=$ipphone}
|
Подскажите, а как Set-ADUser .... -Replace @{ipPhone=$ipphone} это значение передать. "Пустые значения нельзя передавать, можно $null."
|
Делать проверку,что есть значение:
Код:
if($ipphone) { |
Я правильно понял? Мне нужно если это поле ipphone не заполнено скрипт выполнялся.
Как вот здесь. Если в csv не полная информация передаем значения $null. $prop = Write-Output EMail Phone Organization JobTitle Foreach ($CurrentUser in $Users) { $Name = $CurrentUser.Name $Surname = $CurrentUser.Surname $prop | Foreach { if($CurrentUser."$_") { Set-Variable -Name "$_" -Value $CurrentUser."$_" -Force } else { Set-Variable -Name "$_" -Value $null -Force } } $path = $CurrentUser.Path $Login = Get-ADuser $Name | Set-ADUser -EmailAddress $Email -MobilePhone $Phone -Company $Organization -Title $JobTitle -PassThru | Move-ADObject -TargetPath $path } |
$Login = Get-ADuser $Name | Set-ADUser -EmailAddress $Email -MobilePhone $Phone -Company $Organization -Title $JobTitle -PassThru | Move-ADObject -TargetPath $path
заменить на: Код:
$User = Get-ADuser $Name |
Время: 10:56. |
Время: 10:56.
© OSzone.net 2001-