Использование модуля Powershell ExchangeOnlineManagement внутри функций Powershell Azure

#azure #powershell #azure-functions #office365

Вопрос:

Я пытался использовать модуль ExchangeOnlineManagement внутри функции Powershell Azure. На данный момент это весь сценарий:

 using namespace System.Net
param($Request, $TriggerMetadata)

$userPrincipalName = $Request.Body.userPrincipalName
$organization = $Request.Body.organization
$groupNames = $Request.Body.groupNames

try {
    Connect-ExchangeOnline -AppId 00000000-0000-0000-0000-000000000000 `
        -Organization $organization `
        -CertificateThumbprint $certThumbPrint `
        -ErrorAction Stop `
        -ShowBanner:$false `
        -ShowProgress:$false `
        -CommandName Add-DistributionGroupMember
    
    foreach ($group in $groupNames) {
        try {
            Write-Information "Adding $($userPrincipalName) to the group $($group)"
            Add-DistributionGroupMember -Identity "$($group)" `
                -Member "$($userPrincipalName)" `
                -BypassSecurityGroupManagerCheck
        }
        catch {
            Write-Error $_
        }
    }

    $successMessage = "$($userPrincipalName) has been added to the distribution groups."
    Write-Information $successMessage
    Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
            StatusCode = [HttpStatusCode]::OK
            Body       = @{
                Success = $true
                Message = $successMessage
            }
        })
}
catch {
    Write-Error $_.Exception.Message
    Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
            StatusCode = [HttpStatusCode]::OK
            Body       = @{
                Success = $false
                Message = $_.Exception.Message
            }
        }) 
}
finally {
    Disconnect-ExchangeOnline -Confirm:$false
}
 

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

[Ошибка] ОШИБКА: Произошла одна или несколько ошибок. (Исключение HttpListenerException возникло во время >прослушивания http://localhost:50397/ чтобы системный браузер завершил вход в систему. Возможная >причина и меры по устранению: приложение не может прослушивать указанный URL-адрес; запустите «netsh http add >>iplisten 127.0.0.1» из командной строки администратора.)Исключение :Тип : >Microsoft.PowerShell.Команды.Сообщение об ошибке записи

Эта проблема возникает не при локальной отладке функции, а только при ее размещении в Azure.

Ответ №1:

Я передавал отпечаток сертификата, используя переменную $certThumbPrint , определенную в файле profile.ps1. Оказывается, информация теряется после того, как функция выполняется один раз. Я переместил отпечаток большого пальца в настройки приложения, извлек его из сценария с помощью $env:CERT_THUMBPRINT , и это устранило проблему.