Войти

Показать полную графическую версию : Измение атрибутов в полльзователей в АД. Ошибки Operator Not supported


Страниц : [1] 2

allegwiz
07-08-2015, 12:47
Подскажите как исправить ошибку. Делаю обновление атрибутов пользователей.
Import-Module ActiveDirectory

$Users = Import-Csv -Delimiter ";" -Path "C:\AD\ad-import.csv"

Foreach ($CurrentUser in $Users) {

$Name = $CurrentUser.Name

$Surname = $CurrentUser.Surname

$Email = $CurrentUser.EMail

$Phone = $CurrentUser.Phone

$Organization = $CurrentUser.Organization

$JobTitle = $CurrentUser.JobTitle

$Login = (Get-ADuser –Filter {GivenName –eq $Name –and Surname –eq $Surname}).SamAccountName #ищем юзера с заданным именем и фамилией и возвращаем его логин

Set-ADUser $Login –EmailAddress $Email –MobilePhone $Phone –Company $Organization –Title $JobTitle

В итого запуска ошибки:
Get-ADUser : Ошибка анализа запроса: "GivenName –eq $Name –and Surname –eq $Surname" Сообщение об ошибке: "Operator Not supported: " с расположением в: "11".
строка:21 знак:21
+ $Login = (Get-ADuser <<<< –Filter {GivenName –eq $Name –and Surname –eq $Surname}).SamAccountName #ищем юзера с заданным именем и фамилией и возвращаем его логин
+ CategoryInfo : ParserError: (:) [Get-ADUser], ADFilterParsingException
+ FullyQualifiedErrorId : Ошибка анализа запроса: "GivenName –eq $Name –and Surname –eq $Surname" Сообщение об ошибке: "Operator Not supported: " с расположением в: "11".,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

Kazun
07-08-2015, 12:55
Измените знак - в фильтре:

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

allegwiz
07-08-2015, 13:22
это ошибка первого варианта.
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

Kazun
07-08-2015, 13:33
Переменная: "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.

allegwiz
07-08-2015, 13:41
Спасибо, помогло. А можно чтобы проверяло по значению cn.

allegwiz
10-08-2015, 17:40
Подскажите а как использовать функции в данном скрипте. Вроде Есть функция userset с параметром ($CurrentUser) и функция Provision с параметром ($user). Но с помощью функций не получается делать обновление атрибутов.

Kazun
10-08-2015, 17:45
А можно чтобы проверяло по значению cn. - Можно, использовать фильтр по CN.

Get-ADuser -Filter {cn -eq $cn}

Я не знаю, о каких функциях идет речь. Но функций userset,Provision - таких нет и не было. Обновление атрибутов происходит через командлет Set-ADUser .

allegwiz
10-08-2015, 18:13
http://forum.oszone.net/post-2242418.html
Здесь используются функции.
В Powershell вывел список функций. get-command -CommandType function

allegwiz
18-08-2015, 16:06
Обновление атрибутов пользователей из csv работает. Подскажите как в этом же скрипте добавить перемещение пользователя в свой контейнер из csv!

Kazun
18-08-2015, 16:22
Добавить, скажем, Path в скрипт - должно быть DistinguishedName (как пример для Users: CN=Users,DC=Contoso,DC=Com или OU: OU=MyTest,DC=Contoso,DC=Com)

$path = $CurrentUser.Path
Get-ADuser -Filter {GivenName -eq $Name -and Surname -eq $Surname} | Set-ADUser -EmailAddress $Email -MobilePhone $Phone -Company $Organization -Title $JobTitle -PassThru | Move-ADObject -TargetPath $path

allegwiz
19-08-2015, 09:27
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


Я правильно понял? Ошибок нет и не переносит, только атрибуты правит.

Kazun
19-08-2015, 09:38
$path либо вручную указывать, либо в из csv. В одном месте должно быть, а не в 2.

$path = "OU=123456,DC=point,DC=pro" - 1
$path = $CurrentUser.Path - 2

И скопируйте повторно код, который я привел постом выше, а то видимо трудно с первого раза скопировать без ошибок.

allegwiz
19-08-2015, 09:50
Спасибо работает. Просто хотел чтобы в csv путь писать конечный.

allegwiz
19-08-2015, 13:04
Еще вопрос. Получается что в 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

Kazun
19-08-2015, 13:35
Пустые значения нельзя передавать, можно $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
}

allegwiz
20-08-2015, 10:59
Есть атрибут ipPhone - (IP-телефон). Никак не получается добавить его в изменение атрибутов.

Kazun
20-08-2015, 11:07
Set-ADUser .... -Replace @{ipPhone=$ipphone}

allegwiz
25-08-2015, 11:05
Подскажите, а как Set-ADUser .... -Replace @{ipPhone=$ipphone} это значение передать. "Пустые значения нельзя передавать, можно $null."

Kazun
25-08-2015, 11:45
Делать проверку,что есть значение:

if($ipphone) {
Set-ADUser $User -Replace @{"ipphone" = $val}
}

allegwiz
25-08-2015, 13:10
Я правильно понял? Мне нужно если это поле 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
}




© OSzone.net 2001-2012