none
PowerShell получение из писем логин и группу, добавить пользователя в группу AD RRS feed

  • Вопрос

  • Добрый день

    В почтовый ящике group@local.com в папку Входящие приходят письма от portal@local.com нужно в письмах найти строчки содержащие user: и group:
    Строчка user: означает логин пользователя удалить user, строчка group: группу Active Directory в которую нужно добавить пользователя
    После обработки письма письмо удалить
    6 апреля 2023 г. 13:47

Все ответы

  • # Установка параметров подключения к Exchange Server
    $exchangeServer = "mail.local.com"
    $username = "admin"
    $password = "pass"
    $securePassword = ConvertTo-SecureString $password -AsPlainText -Force
    $cred = New-Object System.Management.Automation.PSCredential ($username, $securePassword)
    $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$exchangeServer/PowerShell/ -Authentication Kerberos -Credential $cred
    Import-PSSession $Session -AllowClobber
    
    # Параметры
    $groupEmailAddress = "group@local.com"
    $portalEmailAddress = "portal@local.com"
    
    # Получаем Inbox папку для указанного почтового ящика
    $inboxFolder = (Get-MailboxFolderStatistics $groupEmailAddress | ?{$_.FolderPath -eq "/Inbox"}).Name
    
    # Получаем все письма от указанного отправителя
    $mailItems = Get-MailboxFolderStatistics $groupEmailAddress -FolderScope $inboxFolder -IncludeOldestAndNewestItems |
    Where-Object {$_.Subject -match "$portalEmailAddress"}
    
    # Обработка каждого письма
    fоreach ($mailItem in $mailItems) {  # Через русскую "о" написано так как форум ошибку выдавал
    # Получаем тело письма
    $mail = Get-Message -Identity $mailItem.FolderPath.ToString() + "/" + $mailItem.Subject.ToString() -ErrorAction Stop
    $mailBody = $mail.Body.ToString()
    
    # Находим строки со словами "user:" и "group:"
    $userLine = ($mailBody | Select-String -Pattern 'user:').Line.ToString()
    $groupLine = ($mailBody | Select-String -Pattern 'group:').Line.ToString()
    
    # Извлекаем логин пользователя и название группы
    $user = $userLine -replace 'user:', ''
    $group = $groupLine -replace 'group:', ''
    
    # Добавляем пользователя в группу
    Add-ADGroupMember -Identity $group -Members $user -ErrorAction Stop
    
    # Удаляем обработанное письмо
    Remove-Message -Identity $mail.Identity -Confirm:$false
    }

    Содержание письма:

    user: login
    group: group_A

    Отправляю письмо с portal@local.com на group@local.com с указанным содержанием.

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

    Подскажите где ошибки?



    • Изменено Bitonmaks 6 апреля 2023 г. 15:05
    6 апреля 2023 г. 13:48
  • Здравствуйте!

    Попробуйте создать контрольный скрипт, где в секции "извлекаем..." добавьте строки $user и $group и прогоните скрипт. А действительно ли Вы получили тот результат, который хотите? Контролька покажет.

    8 апреля 2023 г. 2:22
  • Добавил

     Write-Host "Получение количества всех писем для почтового ящика $groupEmailAddress"
    $allMailItems = Get-MailboxFolderStatistics $groupEmailAddress -FolderScope $inboxFolder -IncludeOldestAndNewestItems |
    Where-Object {$_.Subject -ne $null}
    Write-Host "Количество всех писем: $($allMailItems.Count)" 
    

    Пишет 0 писем. 

    Запускаю команду через Exchange Management Shell показывает количество писем.

    Где косячу?

    10 апреля 2023 г. 14:26
  • $null  это не число, возможно сравнение не работает, проверьте.
    12 апреля 2023 г. 1:51