Скрипт для получения списка общих папок в адресной книге, от имени которых пользователи могут отправлять почту

При работе с Exchange вечно возникают какие-то нетривиальные задачи, а вот возможности администрирования Exchange резко сократились в новых версиях через web GUI и все больше приходится обращаться к Powershell. Сегодня я хотел бы представить скрипт, который позволяет получить список общих папок из адресной книги, от имени которых пользователи могут отправлять почту:


If (Test-Path MailPublicFolderUserPermission1.txt) { Remove-Item MailPublicFolderUserPermission1.txt }
If (Test-Path MailPublicFolderUserPermission2.txt) { Remove-Item MailPublicFolderUserPermission2.txt }
echo $("Public folder path`tPublic folder DisplayName`tSend-As users") | out-file -Append MailPublicFolderUserPermission1.txt
echo $("Public folder path`tPublic folder DisplayName`tSend-As users") | out-file -Append MailPublicFolderUserPermission2.txt

$PFList = Get-PublicFolder -Recurse | ?{ $_.MailEnabled -eq "True" };
foreach ($PF in $PFList) {
  $MPF=Get-MailPublicFolder -Identity $PF;
  [email protected]();
  $userList='';
  $PFID="\"+$PF.Name.Replace('"','""').Replace('&','`&');
  if ($PF.ParentPath -ne "\") { $PFID=$PF.ParentPath+$PFID };

  # Показать общие папки, которые видны в адресной книге
  if (-Not $MPF.HiddenFromAddressListsEnabled)
  {
    $permissions = Get-ADPermission -Identity $MPF.Identity
    foreach ($user in $permissions)
    {
      # Если нужно каждого пользователя в одной строке, то оставляем первое условие и комментируем второе.
      # Если нужен список всех пользователей в одной строке, то оставляем второе условие и комментируем первое.
      if ( $user.Extendedrights -like 'Send-As' -and $user.User -notlike 'S-1-5-21-*') { echo ($PFID+"`t"+$MPF.DisplayName+"`t"+$user.User) | out-file -Append MailPublicFolderUserPermission1.txt };
      if ( $user.Extendedrights -like 'Send-As' -and $user.User -notlike 'S-1-5-21-*') { $userEntry+=$user.User };
    };

    if($userEntry.length -gt 0) 
    {
      $userList=$($userEntry -join ','); 
      echo $($PFID+"`t"+$MPF.DisplayName+"`t"+$userList)  | out-file -Append MailPublicFolderUserPermission2.txt;
    };
  }
}