Назад | Перейти на главную страницу

Преобразуйте Get-ADPrincipalGroupMembership так, чтобы я мог записать его в поле заметок

Я пишу сценарий 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 преобразует его в строку.