Последние несколько часов я бился головой о стену, я уверен, что это потому, что я не совсем понимаю, как работают @ {} и $ _.
Первый код:
Get-ADUser username -Properties mail | Set-ADUser -replace @{"proxyaddresses"="SMTP:"+$_.mail}
Как вы видите, я пытаюсь обновить поля адресов прокси с помощью адреса электронной почты пользователя.
Вместо этого извлекается только строка: (вывод: proxyaddresses : {SMTP:}
), и конвейер игнорируется, я предполагаю, что это потому, что он по какой-то причине пуст, но мне не понятно почему.
Я пробовал варианты, такие как "proxyaddresses="SMTP:$($_.mail)"
Я пытался использовать свойства по умолчанию, которые всегда отправляются с Get-ADUser
, такие как UserPrincipalName
Я знаю, что что-то подобное возможно из-за этого http://www.itprotoday.com/management-mobility/more-flexible-active-directory-one-liner и множества ответов на SO с использованием некоторого варианта связанного примера.
Когда я присваиваю переменную SMTP:$_.mail
, а затем использую ее в поле, например, так:
Get-ADUser username -Properties mail | %{ $smtp = "SMTP:"+$_.mail
$_|Set-ADUser -replace @{"proxyAddresses"=$smtp}
Это работает (вывод: proxyaddresses :{SMTP:emailaddress@domain.com}
). Если я пропущу строку так: @{"proxyaddresses"=$_.mail}
Я получаю следующую ошибку:
Set-ADUser: Невозможно привязать параметр «Заменить» к цели. Параметр исключения «Заменить»: «Ссылка на объект не установлена на экземпляр объекта.»
В строке: 1 символ: 58
Я не уверен, что это значит.
Мне бы хотелось, чтобы сработала некоторая вариация моей первоначальной идеи, но я остановлюсь на обходном пути, используя дополнительную переменную, если другого пути нет.
РЕДАКТИРОВАТЬ: Кажется, есть некоторая путаница в том, что я спрашиваю, поэтому я уточню:
Есть ли способ использовать конвейерную переменную $_
без блока скрипта внутри хеш-таблицы (внутри блока скрипта требуется двойной конвейер, как @ TheIncorrigible1 , предложенный в его первом ответе.)
РЕДАКТИРОВАТЬ: На основе это кажется, что это не должно иметь никаких проблем.