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ß
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ß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 367133
Url: https://administrator.de/contentid/367133
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
3 Kommentare
Neuester Kommentar
Servus.
(benötigt die "Microsoft.Exchange.WebServices.dll" welche hier heruntergeladen werden kann und ins selbe Verzeichnis gelegt werden muss)
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 .
Grüße Uwe
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 .
[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