Я пытаюсь создать встречу в почтовом ящике ресурса в Exchange Online с помощью API EWS (Exchange Web Services).
Я аутентифицируюсь в EWS, используя глобальную учетную запись администратора O365.
Затем я выдаю себя за организатора, а затем связываюсь с папкой календаря почтового ящика. Для этого я настроил соответствующие роли / области управления.
При создании встречи организатор отображается как учетная запись почтового ящика комнаты, а не как олицетворенная учетная запись. Я не вижу, что я делаю неправильно ...
Я использовал различные источники, чтобы получить меня, насколько я:
https://docs.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/dd633680(v=exchg.80)
https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/delegate-access-and-ews-in-exchange
Приведенный ниже код успешно создает встречу в календаре $ roomMailbox, хотя организатор настроен как почтовый ящик комнаты, а не организатор, которого я пытаюсь выдать за себя ...
Любое руководство высоко ценится.
using namespace Microsoft.Exchange.WebServices.Data
Set-StrictMode -Version 5.1
$ErrorActionPreference = 'Stop'
function Connect-EWS
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$false)]
[System.Management.Automation.PSCredential]$Credential
)
try
{
[void][Reflection.Assembly]::LoadFile("C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll")
}
catch
{
throw "Could not import Microsoft Exchange web services library: $($_.Exception.Message)"
}
try
{
$ews = [ExchangeService]::New()
}
catch
{
throw "Could not create Microsoft.Exchange.WebServices.Data.ExchangeService object: $($_.Exception.Message)"
}
if($credential)
{
$ews.Credentials = $Credential.GetNetworkCredential()
}
else
{
$ews.UseDefaultCredentials = $true
}
$validateRedirectionUrlCallback = {
Param([String]$Url)
if($Url -eq "https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml")
{
return $true
}
else
{
return $false
}
}
try
{
$ews.AutodiscoverUrl($Credential.UserName,$validateRedirectionUrlCallback)
}
catch
{
throw "Autodiscover failed: $($_.Exception.Message)"
}
return $ews
}
function New-Appointment
{
Param
(
[Parameter(Mandatory = $true)]
[String]$Organiser
,
[Parameter(Mandatory = $true)]
[String]$RoomMailbox
,
[Parameter(Mandatory = $true)]
[DateTime]$Start
,
[Parameter(Mandatory = $true)]
[DateTime]$End
,
[Parameter(Mandatory = $true)]
[String]$Subject
,
[Parameter(Mandatory = $true)]
[String]$Location
)
try # Resolve the organiser ID
{
[Void]$ews.ResolveName($Organiser,[ResolveNameSearchLocation]::DirectoryOnly, $false)
}
catch
{
throw "Could not resolve Organiser identity: $Organiser : $($_.Exception.Message)"
}
try # Attempt to enable impersonation as the organiser
{
$ews.ImpersonatedUserId = [ImpersonatedUserId]::New([ConnectingIdType]::SmtpAddress, $Organiser)
}
catch
{
throw "Could not impersonate user $Organiser : $($_.Exception.Message)"
}
try # Create a new appointment object
{
$appointment = [Appointment]::New($ews)
}
catch
{
throw "Could not create appointment object: $($_.Exception.MEssage)"
}
# Add each of the properties below associated values into the appointment object
$setProperties = 'Start','End','Subject','Location'
foreach($p in $setProperties)
{
$appointment.$p = Get-Variable $p -ValueOnly
}
try # Set the folder ID as the calendar of the room mailbox
{
$folderId = [FolderId]::New([WellKnownFolderName]::Calendar, $RoomMailbox)
}
catch
{
throw "Could not generate target calendar folder id: $($_.Exception.Message)"
}
try # Try and bind the EWS connection to the folder
{
$folder = [Folder]::Bind($ews, $folderId)
}
catch
{
throw "Could not bind to user $($folderId.FolderName) $($_.Exception.Message)"
}
try # Save the appointment
{
$appointment.Save($folderId, [SendInvitationsMode]::SendToAllAndSaveCopy)
}
catch
{
throw "Could not save appointment as organiser: $Organiser : $($_.Exception.Message)"
}
}
if(!$credential)
{
$credential = Get-Credential -UserName $globalAdminUPN -Message "Please enter O365 credentials for user $globalAdminUPN"
}
$Organiser = 'organiser@domain.com'
$RoomMailbox = 'roommailbox@domain.com'
$Start = '01/02/2019 22:00'
$End = '01/02/2019 23:00'
$Subject = 'Test Appointment'
$Location = 'Test Location'
$ews = Connect-EWS -Credential $credential
try
{
New-Appointment -Organiser $Organiser `
-RoomMailbox $RoomMailbox `
-Start $Start `
-End $End `
-Subject $Subject `
-Location $Location
}
catch
{
Write-Host "ERROR: $($_.Exception.Message)" -ForegroundColor Red
}