PowerShell — Использование Exchange Server 2016 REST API для получения событий календаря

#rest #powershell #exchange-server

#rest #powershell #exchange-сервер

Вопрос:

У меня есть сценарий элементов календаря почтового ящика ресурса с использованием REST API — но я получаю эту ошибку на Exchange Server 2016 — не уверен, в чем проблема — у моей учетной записи есть роль applicationimpersonation.

Сообщение об ошибке :

  Invoke-RestMethod : The remote server returned an error: (400) Bad Request.
At line:2 char:28
  ...              $events = Invoke-RestMethod -Uri $uri -Credential $creds
                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
      FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
  

скрипт:

 $Username = 'Contosoadministrator'
$Password = 'xxxxxxx'
$SecureString = ConvertTo-SecureString -AsPlainText $Password -Force
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Username,$SecureString 
$mtgroom = @("meeting@contoso.com") 
$strCurrentTimeZone = (Get-WmiObject win32_timezone).StandardName
$TZ = [System.TimeZoneInfo]::FindSystemTimeZoneById($strCurrentTimeZone)
$start = (get-date).ToShortDateString()
$end = (get-date).ToShortDateString()
$uri = "https://mail.contoso.com/api/v2.0/users/$mtgroom/calendar/calendarView?startDateTime=$($start)T08:00:00amp;endDateTime=$($end)T19:30:00"
 $events = Invoke-RestMethod -Uri $uri -Credential $creds
  

Комментарии:

1. Я думаю, вам лучше использовать сортируемый формат даты и времени . (Get-Date).ToString("s") который возвращает текущую дату в виде 2019-03-13T14:16:29

2. Я разобрался с этим, теперь у меня другая проблема, я обновил свой вопрос

3. Итак, у вас была проблема с датой, и теперь она устранена, и у вас другая? Если это вы, мы должны закрыть этот вопрос и открыть другой вместо изменения целевого объекта.

Ответ №1:

Я думаю, что это, вероятно, из-за того, как формируются ваши строки даты и времени. В моей среде я получаю «3/13/2019» при использовании (get-date).ToShortDateString() . Это может привести к неправильной форме URL. Я могу ошибаться в зависимости от ваших настроек локализации.

Получаете ли вы лучшие результаты от get-date -Format "MM-dd-yyyy" для ваших дат начала и окончания?


Пример из learn.microsoft.com также использует даты через дефис

 GET https://outlook.office.com/api/v2.0/me/calendarview?startDateTime=2014-10-01T01:00:00amp;endDateTime=2014-10-31T23:00:00amp;$select=Subject 
  

Комментарии:

1. Хорошо, как вы сказали, я переформатировал строки даты и времени. это работает, но у меня все еще есть проблема. Я обновил свой вопрос.