Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Измение атрибутов в полльзователей в АД. Ошибки Operator Not supported (http://forum.oszone.net/showthread.php?t=303605)

allegwiz 07-08-2015 12:47 2538322

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

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 2538326

Измените знак - в фильтре:

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 2538340

это ошибка первого варианта.
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 2538348

Переменная: "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 2538354

Спасибо, помогло. А можно чтобы проверяло по значению cn.

allegwiz 10-08-2015 17:40 2539681

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

Kazun 10-08-2015 17:45 2539684

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

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

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

allegwiz 10-08-2015 18:13 2539692

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

allegwiz 18-08-2015 16:06 2543123

Обновление атрибутов пользователей из csv работает. Подскажите как в этом же скрипте добавить перемещение пользователя в свой контейнер из csv!

Kazun 18-08-2015 16:22 2543137

Добавить, скажем, 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 2543387

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 2543399

$path либо вручную указывать, либо в из csv. В одном месте должно быть, а не в 2.

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

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

allegwiz 19-08-2015 09:50 2543402

Спасибо работает. Просто хотел чтобы в csv путь писать конечный.

allegwiz 19-08-2015 13:04 2543490

Еще вопрос. Получается что в 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 2543497

Пустые значения нельзя передавать, можно $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 2543806

Есть атрибут ipPhone - (IP-телефон). Никак не получается добавить его в изменение атрибутов.

Kazun 20-08-2015 11:07 2543813

Set-ADUser .... -Replace @{ipPhone=$ipphone}

allegwiz 25-08-2015 11:05 2545741

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

Kazun 25-08-2015 11:45 2545761

Делать проверку,что есть значение:
Код:

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


allegwiz 25-08-2015 13:10 2545790

Я правильно понял? Мне нужно если это поле 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
}

Kazun 25-08-2015 14:36 2545836

$Login = Get-ADuser $Name | Set-ADUser -EmailAddress $Email -MobilePhone $Phone -Company $Organization -Title $JobTitle -PassThru | Move-ADObject -TargetPath $path

заменить на:

Код:

$User = Get-ADuser $Name

if($User) {
        if($ipphone) {
                Set-ADUser $User -Replace @{"ipphone" = $ipphone}
        }
       
        Set-ADUser $User -EmailAddress $Email -MobilePhone $Phone -Company $Organization -Title $JobTitle -PassThru | Move-ADObject -TargetPath $path
}



Время: 10:56.

Время: 10:56.
© OSzone.net 2001-