Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Указанный атрибут уже присутствует в этом объекте

Ответить
Настройки темы
PowerShell - [решено] Указанный атрибут уже присутствует в этом объекте

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Есть скрипт, в нем есть одна строчка, которая не выполняется с указанной ниже ошибкой. Как заставить поменять это параметр или хоть в какую сторону копать?
строчка
Код: Выделить весь код
Set-ADUser -Identity:"$User" -Replace:@{"logonHours"="0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"}
ошибка
Код: Выделить весь код
Set-ADUser : Указанный атрибут уже присутствует в этом объекте
+ Set-ADUser -Identity:"$User" -Replace:@{"logonHours"="0","0","0","0", ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (CN=test_user,OU...DC=contoso,DC=com:ADUser) [Set-ADUser], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8318,Microsoft.ActiveDirectory.Management.Commands.SetADUser

Отправлено: 14:52, 11-06-2018

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1167
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата Elven:
-Identity:"$User" »
Цитата Elven:
-Replace:@ »
Если не секрет, почему двоеточие, а не пробел?

-------
scio me nihil scire. Ѫ


Отправлено: 18:52, 11-06-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
-Replace:@{"logonHours"=[byte[]]("0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0")}
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:30, 12-06-2018 | #3


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1167
Благодарности: 486

Профиль | Отправить PM | Цитировать


Kazun, тогда к Вам вопрос: так почему, всё же, двоеточие? В документации другой синтаксис...

-------
scio me nihil scire. Ѫ


Отправлено: 11:45, 12-06-2018 | #4


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


YuS_2, а чем плохо двоеточие? нормальный символ
Kazun, спасибо, как всегда коротко и точно.

Отправлено: 15:21, 12-06-2018 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Kazun, тогда к Вам вопрос: так почему, всё же, двоеточие? В документации другой синтаксис... »
Для передачи параметров можно использовать ":", что изначально может смутить, но есть момент когда без него сложнее, например когда приходиться переопределить параметры типа Switch.


Код: Выделить весь код
PS > function foo([switch]$force=$true) {$force}
PS > foo

IsPresent
---------
     True


PS > foo -force:$false

IsPresent
---------
    False


PS > foo -force $false

IsPresent
---------
     True
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:59, 12-06-2018 | #6


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1167
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата Kazun:
Для передачи параметров можно использовать ":" »
Спасибо!
А в какой документации существует описание?

Цитата Elven:
а чем плохо двоеточие? нормальный символ »
А где я сказал, что это плохо? Я вовсе не против символов, сакральности в них не вижу
Скорее против недокументирования... вот это плохо.

-------
scio me nihil scire. Ѫ


Отправлено: 17:17, 12-06-2018 | #7


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Windows PowerShell Language Specification Version 3.0 - https://www.microsoft.com/en-us/down....aspx?id=36389

• When specifying an argument that matches a parameter having the [switch] type constraint (§8.10.5), the presence of the argument name on its own causes that parameter to be set to $true. However, the parameter's value can be set explicitly by appending a suffix to the argument. For example, given a type constrained parameter p, an argument of -p:$true sets p to True, while -p:$false sets p to False.


Код: Выделить весь код
8.10.5 The [switch] type constraint
When a switch parameter is passed, the corresponding parameter in the command must be constrained by the type switch. Type switch has two values, True and False.
Consider the following function definition and calls:
function Process ([switch]$trace, $p1, $p2) { … }

Process 10 20					# $trace is False, $p1 is 10, $p2 is 20
Process 10 -trace 20			# $trace is True, $p1 is 10, $p2 is 20
Process 10 20 -trace			# $trace is True, $p1 is 10, $p2 is 20
Process 10 20 -trace:$false	# $trace is False, $p1 is 10, $p2 is 20
Process 10 20 -trace:$true		# $trace is True, $p1 is 10, $p2 is 20
Комментарий от разработчика по поводу синтаксиса(+ касательно PowerShell Core, где -switch bool не поддерживается) - https://github.com/PowerShell/PowerS...ment-311759499

BrucePay commented on 28 Jun 2017

@mklement0 The -switch: [bool] syntax is deliberately awkward as there is really only one scenario for passing an actual parameter to a switch: commands calling commands (which you described nicely in an earlier comment.) If you expect the user to pass an actual parameter, then you should be using boolean. If your cmdlet requires the user to pass arguments to a switch parameter then your cmdlet should be redesigned.

@SteveL-MSFT No we can't support -switch [bool]. The current behavior is fundamental to how the parameter binder works.

-Command and -File are very different operations. -Command gathers all of the arguments into a string and then processes that string as a PowerShell script. On the other hand, -File points at a script and passes the remaining arguments to the process. The application receives these arguments through argv[] as strings. Process creation simply doesn't allow for the parent to pass anything but strings to the child process. The PowerShell runtime does do some interpretation on these strings (e.g. treating strings that start with '-' as parameters instead of arguments) but this is necessarily limited by the lack of type information.

Последний раз редактировалось Kazun, 12-06-2018 в 18:12.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:40, 12-06-2018 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Указанный атрибут уже присутствует в этом объекте

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Продажи планшетов уже в этом году обойдут показатели ноутбуков OSZone News Новости информационных технологий 0 29-05-2013 10:30
Установка - .NET Framework 4.5 при установке пишет "В этом объекте нет подписи" bambook67 Microsoft Windows 7 4 23-04-2013 17:54
AMD может представить архитектуру Steamroller уже в этом году OSZone News Новости железа 0 01-04-2013 13:30
Samsung начнёт производство гибких AMOLED-дисплеев уже в этом квартале OSZone News Новости железа 0 21-07-2012 14:30
Открытая бета-версия StarCraft II появится уже в этом месяце OSZone News Новости информационных технологий 0 11-02-2010 15:30




 
Переход