FacilityNet har fået udviklet et Powershell script, som kan hente bookinger ud fra Exchange (on-premise) og Exchange Online (Office 365) i form af en CSV fil, som kan importeres i FacilityNet.
Bemærk: licens til scriptet er en tilkøbsydelse.
OBS: Denne artikel indeholder vigtig information, læs den grundigt igennem inden brug af scriptet.
Forberedelse
1. Du skal bruge en konto med impersonation rettighed for at kunne hente aftaler fra lokalekalendere. Efter du har kørt scriptet, kan du fjerne rettigheden igen. Læs om, hvordan du tildeler denne rettighed:
Exchange (on-premise): https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-configure-impersonation
Exchange Online (Office 365): https://kb.infobridge.com/hc/en-us/articles/202705692-How-to-set-Impersonation-in-Microsoft-Office-365-and-Microsoft-Exchange-2013-2016
2. Efter køb af licens, sender FacilityNet en ZIP-fil med script i. Pak ZIP-filen ud i en mappe på f.eks. Skrivebord.
3. Hent Microsoft EWS Managed API via PowerShell:
PS> Save-Package -ProviderName NuGet -Name Microsoft.Exchange.WebServices -Path .
Dette vil hente en .nupkg fil. Dette er blot en ZIP-fil, som du kan åbne med f.eks. 7-Zip.
4. Gå ind i folderen lib\40 i ZIP-filen. Kopier følgende filer til den mappe, som du pakkede script ud i:
Kørsel
Du er nu klar til at køre scriptet. Først skal du tillade Powershell at køre scripts. Du kan nøjes med at gøre det for den aktive session via følgende kommando:
PS> Set-ExecutionPolicy -Scope Process Bypass
Scriptet er grundigt dokumenteret via Powershells indbyggede hjælpesystem. Du ser hjælpen med kommandoen:
PS> Get-Help .\ExportRoomBookingsCV.ps1 -Detailed
Hvis I benytter FacilityNet Outlook Add-in
Hvis I benytter FacilityNets add-in til Outlook, så vil I opleve, at bookings efter import i FacilityNet ikke dukker op i Add-in, når man åbner det tilhørende Exchange møde i Outlook.
Det skyldes, at script er nødt til at opdatere de eksporterede møder på Exchange siden for at oprette link mellem mødet og den tilhørende FacilityNet booking. Dette er ikke noget vi tillader at gøre, uden at I eksplicit beder script om det.
I skal derfor tilføje følgende parametre, når I kører script:
-WriteBackGuid -WriteToOrganizerAppointment
Bemærk: dette vil få Exchange til at sende opdateringer ud til mødedeltagerne for alle de eksporterede møder. Det skyldes virkemåden i Exchange og kan desværre ikke undgås.
Spørgsmål og svar
Script fejler med besked om at ingen lokaler blev fundet?
Lokaler skal være medlem af en room list for at blive medtaget i eksport. En room list er en distributionsgruppe af en bestemt type:
Hvis I har lokalerne i en normal distributionsgruppe, kan I nemt konvertere den med følgende Powershell kommando:
PS> Set-DistributionGroup -Identity "Building 34 Conference Rooms" -RoomList
Ellers kan I nemt tilføje dem til en ny liste via disse kommandoer:
PS> New-DistributionGroup -Name "All Rooms" -RoomList
PS> Get-Mailbox -ResultSize unlimited -Filter "RecipientTypeDetails -eq 'RoomMailbox'" | foreach { Add-DistributionGroupMember -Identity "All Rooms" -Member $_.Name }
Exchange svarer med fejlbeskeden "You have exceeded the maximum number of objects that can be returned for the find operation"?
Det skyldes, at du er løbet ind i grænsen for, hvor mange kalenderaftaler Exchange tillader at returnere i ét kald. Du kan reducere tidsvinduet pr. Exchange kald via parameteren DaysPerCall, som default er sat til 2 * 365 dage (2 år). OBS: Hvis du sætter den meget lavt, vil eksporten tage lang tid og måske overskride, hvor mange kald Exchange tillader pr minut.
Hvorfor skriver script til Exchange, hvis jeg benytter parameteren WriteBackGuid?
Parameteren WriteBackGuid benyttes til at lave et link mellem de bookinger, der importeres i FacilityNet og de tilhørende møder i Exchange, et link som FacilityNet Outlook Add-in kan se og benytte til at finde den rette booking. Teknisk foregår det ved at skrive til en custom extended property på Exchange mødet.
Hvorfor benytter FacilityNet Outlook Add-in ikke bare mødets ID til at finde tilhørende booking?
For at undgå, at forsinke behandlingen af begivenheder i Outlook for aftaler og møder, som ikke har FacilityNet ordrer tilknyttet.
Hvorfor er det vigtigt?
Fordi Outlook kan danne mange begivenheder, især ved opstart. Ydermere er nogle begivenheder nødt til at blive behandlet synkront for at understøtte annullering.