Я пишу сценарий PowerShell для автоматизации отправки пользователей в отпуск. В рамках этого процесса мы удаляем пользователя из его списков рассылки, если он долгое время отсутствует, чтобы он не мог вернуться к тысячам электронных писем.
Я планирую сохранить список участников в поле заметок на вкладке телефона, чтобы я мог легко восстановить его вручную, когда они вернутся (по одному шагу автоматизации за раз)
У меня нет проблем с получением списка групп рассылки с помощью:
Get-ADPrincipalGroupMembership $user | Where-Object GroupCategory -eq Distribution | select name
Часть, с которой я сталкиваюсь, - это когда я пытаюсь сохранить ее в поле заметок с помощью:
Set-ADUser $user -replace @{info=(Get-ADPrincipalGroupMembership $user | Where-Object GroupCategory -eq Distribution |select name)}
Я получаю сообщение об ошибке:
Set-ADUser : Invalid type 'System.Management.Automation.PSObject'.
Я попытался преобразовать данные в форму с помощью -split и -join, но либо я делаю это неправильно, либо это неправильные команды. ConvertTo-CSV «работает», но добавляет много лишнего мусора.
Как я могу преобразовать эти данные, чтобы вкладка телефона принимала их? Мой предпочтительный формат - это то, что я могу использовать для копирования / вставки групп обратно в послесловие, т.е. group1; group2; group3 и т. д. (Я также приму комментарии, что мой подход к этому неправильный и что метод xyz гораздо лучше.)
Я не хочу говорить об очевидном, но вы пытаетесь вставить объект Powershell, где info
Атрибут пользователя AD принимает только строки. Вам необходимо сначала преобразовать список членства в группах в строку и самостоятельно добавить логику для размещения выбранного разделителя между каждым именем группы, будь то запятая, точка с запятой или символ новой строки.
Foreach($grp In Get-ADPrincipalGroupMembership $usr | Where-Object GroupCategory -eq Distribution)
{
$GroupString += $grp.Name + ';'
}
$GroupString = $GroupString.TrimEnd(';') # Remove the last delimiter off the end
Set-ADUser $usr -Replace @{info=$GroupString}
Вы также можете направить вывод по конвейеру:
Select-Object -ExpandProperty name
Это позволяет выбрать только одно свойство, но PowerShell преобразует его в строку.