isoldebaden
Goto Top

Exchange Kalendereinträge anpassen via powershell

Hallo Leute,

ist es möglich per Powershell Kalendereinträge eines Raum- bzw. Gerätepostfaches anzupassen? Es geht mir speziell darum, dass das Skript Termine, die als "Frei" angezeigt werden, auf "Beschäftigt" setzt.
Es handelt sich um Exchange 2013 und Outlook 2010.

Danke im Voraus!

Gruß

Content-Key: 367133

Url: https://administrator.de/contentid/367133

Printed on: April 25, 2024 at 11:04 o'clock

Member: colinardo
Solution colinardo Mar 06, 2018, updated at Mar 07, 2018 at 06:16:38 (UTC)
Goto Top
Servus.
ist es möglich per Powershell Kalendereinträge eines Raum- bzw. Gerätepostfaches anzupassen?
mit ein bißchen EWS kein großes Problem

(benötigt die "Microsoft.Exchange.WebServices.dll" welche hier heruntergeladen werden kann und ins selbe Verzeichnis gelegt werden muss)
<#
   Vor dem Start des Skript ist dem User welcher das Skript später ausführt die Impersonation-Berechtigungzu erteilen:
   In diesem Beispiel der User 'Administrator' (Bitte einmalig in einer EMS ausführen)  

    New-ManagementRoleAssignment -Name:impersonationAssignmentName -Role:ApplicationImpersonation -User:Administrator
#>

# Start Variablen -------------------------------------------------------------------------
# FQDN des Exchange
$exserver = "ex.domain.tld"  
# Name des Raum-/Gerätepostfachs
$mailbox = "Raumpostfach@domain.tld"  

# Ende Variablen -------------------------------------------------------------------------

if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}    

# Active Directory Modul laden
Import-Module ActiveDirectory

# EWS DLL laden
Add-Type -Path "$PSScriptRoot\Microsoft.Exchange.WebServices.dll"  

# Allen Zertifikaten vertrauen
Add-Type @"  
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@  
# Trust all certs policy dem ServicePointManager zuweisen
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

# EWS Objekt erstellen
$ews = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2013)
$ews.Url = "https://$exserver/ews/exchange.asmx"  
# Benutze die Credentials mit dem das Skript ausgeführt wird
$ews.UseDefaultCredentials = $true
$ews.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, [string]$mailbox)


# -----------------------------
$view = New-Object Microsoft.Exchange.WebServices.Data.ItemView(10000)
$view.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$result = $ews.FindItems([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar,$view)
$result.Items | ?{$_.LegacyFreeBusyStatus -eq [Microsoft.Exchange.WebServices.Data.LegacyFreeBusyStatus]::Free} | %{
    $_.LegacyFreeBusyStatus = [Microsoft.Exchange.WebServices.Data.LegacyFreeBusyStatus]::Busy
    $_.Update([Microsoft.Exchange.WebServices.Data.ConflictResolutionMode]::AutoResolve)
}


Alternativ geht das natürlich auch über ein Outlook-Client-Skript wenn der User entsprechende Rechte am Raumpostfachkalender besitzt.

Outlook öffnen und dann zum Raumpostfach-Kalender navigieren (und dieses selektiert lassen!), dann folgendes Powershell-Skript aufrufen und freuen face-wink.
[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
$objOL = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
if (!$objOL){$objOL = New-Object -Com Outlook.Application}
$objOL.ActiveExplorer().CurrentFolder.Items | ?{$_.BusyStatus -eq 0} | %{$_.BusyStatus = 2; $_.Save()}

Grüße Uwe
Member: IsoldeBaden
IsoldeBaden Mar 07, 2018 at 08:27:53 (UTC)
Goto Top
Hallo Uwe,

danke dir! Genau so hatte ich mir das vorgestellt. Hammer! face-smile

Danke für eine Mühe!

Gruß
Member: colinardo
colinardo Mar 07, 2018 at 08:32:27 (UTC)
Goto Top
Immer gerne face-smile.