#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
, и это устранило проблему.