Regeln von OOF mit PS anzeigen
Hallo zusamen,
ich möchte die hinterlegten Regen bei Abwesenheitsbenachrichtigungen anzeigen. Mit "Get-MailboxAutoReplyConfiguration" werden mir sämtliche Informationen angezeigt. Nicht aber welche Regel für die Abwensenheitsbenachrichtung angewendet wird.
Mit "Get-Mailbox -Identity „User“ | Get-InboxRule" bekomme ich zwar alle allgemeinen Regeln angezeigt, nicht aber die aus der Abwesenheitsbenachrichtigung.
Gibt es eine Möglichkeit sich diese Regeln ausgegeben zu lassen?
Vielen Dank!
Chris
ich möchte die hinterlegten Regen bei Abwesenheitsbenachrichtigungen anzeigen. Mit "Get-MailboxAutoReplyConfiguration" werden mir sämtliche Informationen angezeigt. Nicht aber welche Regel für die Abwensenheitsbenachrichtung angewendet wird.
Mit "Get-Mailbox -Identity „User“ | Get-InboxRule" bekomme ich zwar alle allgemeinen Regeln angezeigt, nicht aber die aus der Abwesenheitsbenachrichtigung.
Gibt es eine Möglichkeit sich diese Regeln ausgegeben zu lassen?
Vielen Dank!
Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1742276828
Url: https://administrator.de/forum/regeln-von-oof-mit-ps-anzeigen-1742276828.html
Ausgedruckt am: 22.12.2024 um 21:12 Uhr
6 Kommentare
Neuester Kommentar
Servus,
vielleicht hilft dir das: https://docs.microsoft.com/de-de/powershell/module/exchange/get-mailboxa ...
vielleicht hilft dir das: https://docs.microsoft.com/de-de/powershell/module/exchange/get-mailboxa ...
Servus.
mit der Hilfe von Powershell und den Exchange Webservices (EWS) z.B. bekommst du alle Regeln erfasst, oder auch mit MFCMAPI, siehe Deaktivieren einer Out-of-Office-Rule eines anderen Postfachs
Nicht erschrecken, das sind meine universellen Funktionen zum Abruf von Ordnern und Items per EWS, dewegen etwas länger. Angabe von Exchange Server und Mailbox , sind ganz unten zu finden.
Zu beachten sind die Anzugebenden Credentials, wenn man diese für eine andere mailbox als seine eigene abfragen möchte muss man entweder Application Impersonation Rechte auf dem Exchange besitzen oder die Credentials der Zielmailbox angeben.
Grüße Uwe
mit der Hilfe von Powershell und den Exchange Webservices (EWS) z.B. bekommst du alle Regeln erfasst, oder auch mit MFCMAPI, siehe Deaktivieren einer Out-of-Office-Rule eines anderen Postfachs
Nicht erschrecken, das sind meine universellen Funktionen zum Abruf von Ordnern und Items per EWS, dewegen etwas länger. Angabe von Exchange Server und Mailbox , sind ganz unten zu finden.
Zu beachten sind die Anzugebenden Credentials, wenn man diese für eine andere mailbox als seine eigene abfragen möchte muss man entweder Application Impersonation Rechte auf dem Exchange besitzen oder die Credentials der Zielmailbox angeben.
$ErrorActionPreference = 'Stop'
# Accept TLS protocols
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType])
function ConnectTo-EWS {
param(
[parameter(mandatory=$false)][bool]$UseScriptCredentials = $true,
[parameter(mandatory=$false)][pscredential]$Credential,
[parameter(mandatory=$true)][string]$server
)
# Allen Zertifikaten vertrauen
try{
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
}catch{}
# EWS DLL laden
Load-EWSLibrary
# EWS-Service Objekt erstellen
$ews = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010)
$ews.Url = "https://$server/ews/exchange.asmx"
$ews.UseDefaultCredentials = $UseScriptCredentials
if (!$UseScriptCredentials){
$ews.Credentials = $Credential.GetNetworkCredential()
}
return $ews
}
# Funktion zum Laden des EWS Assemblies
function Load-EWSLibrary {
if($psscriptroot -ne ''){
$localpath = join-path $psscriptroot 'Microsoft.Exchange.WebServices.dll'
}else{
$localpath = join-path $env:TEMP 'Microsoft.Exchange.WebServices.dll'
}
$tmp = '';$zip = $null
try{
if(!(Test-Path $localpath)){
Add-Type -A System.IO.Compression.FileSystem
$tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"
write-host "Downloading and extracting required 'Microsoft.Exchange.WebServices.dll' ... " -F Green -NoNewline
(New-Object System.Net.WebClient).DownloadFile('https://www.nuget.org/api/v2/package/Exchange.WebServices.Managed.Api', $tmp)
$zip = [System.IO.Compression.ZipFile]::OpenRead($tmp)
$zip.Entries | ?{$_.Fullname -eq 'lib/net35/Microsoft.Exchange.WebServices.dll'} | %{
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$localpath)
}
Unblock-File -Path $localpath
write-host "OK" -F Green
}
Add-Type -Path $localpath
}catch{
write-error "Error downloading required EWS Library / Error: $($_.Exception.Message)"
}finally{
if ($zip){$zip.Dispose()}
if($tmp -ne ''){del $tmp -Force -EA SilentlyContinue}
}
}
# Funktion zum definieren eines bestimmten Ordners
function Get-EWSFolder{
param(
[parameter(mandatory=$true)][Microsoft.Exchange.WebServices.Data.WellKnownFolderName]$storeroot,
[parameter(mandatory=$false)][string]$mailbox,
[parameter(mandatory=$false)][string]$path = "",
[parameter(mandatory=$true)][ValidateNotNullOrEmpty()][Microsoft.Exchange.WebServices.Data.ExchangeService]$service
)
# rekusiver Skriptblock zum Suchen eines Ordnerpfades
$findfolder = {
param(
[string]$mailbox,
$id,
[string]$subpath
)
# bind folder to specific mailbox only when parameter is not empty and not public folder root
if($mailbox -ne "" -and $id -ne [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::PublicFoldersRoot){
$id = New-Object Microsoft.Exchange.WebServices.Data.FolderId $id,$mailbox
}
if ($subpath -ne ""){
$parts = $subpath.Split("\")
$view = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1)
$view.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Shallow
$view.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$f = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName,$parts)
$result = $service.FindFolders($id,$f,$view)
if ($result.TotalCount -gt 0){
if ($parts.Count -gt 1 ){
& $findfolder -id $result.Folders.Id -subpath $subpath.Split("\",2)[-1]
}else{
return $result.Folders
}
}else{
throw "Search returned no results for path subpart '$($parts)'."
}
}else{
return ([Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$id))
}
}
return (& $findfolder -mailbox $mailbox -id $storeroot -subpath $path)
}
function Get-EWSFolderItems {
param(
[parameter(mandatory=$true,ValueFromPipelineByPropertyName=$true)]$id,
[parameter(mandatory=$false)][int]$maxitems = 10000,
[parameter(mandatory=$false)][Microsoft.Exchange.WebServices.Data.PropertySet]$propset = $null,
[parameter(mandatory=$false)][Hashtable]$filter = $null,
[parameter(mandatory=$false)][ValidateSet('And','Or')][Microsoft.Exchange.WebServices.Data.LogicalOperator]$filterLogicalOperator = 'And',
[parameter(mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)][ValidateNotNullOrEmpty()][Microsoft.Exchange.WebServices.Data.ExchangeService]$service,
[parameter(mandatory=$false)][Microsoft.Exchange.WebServices.Data.ItemTraversal]$traversal = [Microsoft.Exchange.WebServices.Data.ItemTraversal]::Shallow
)
$result = $null
$moreItems = $true
$resultSet = @()
$view = New-Object Microsoft.Exchange.WebServices.Data.ItemView($maxitems)
$view.Traversal = $traversal
if ($propset -ne $null){
$view.PropertySet = $propset
}else{
$view.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
}
if ($filter -ne $null){
$filterCollection = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+SearchFilterCollection
$filterCollection.LogicalOperator = $filterLogicalOperator
$filter.GetEnumerator() | %{
$itm = $_
if ($itm.Value -is [hashtable]){
switch($itm.Value.Operator){
">" {$filterCollection.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsGreaterThan($itm.Key,$itm.Value.Value)))}
"<" {$filterCollection.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsLessThan($itm.Key,$itm.Value.Value)))}
"<=" {$filterCollection.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsLessThanOrEqualTo($itm.Key,$itm.Value.Value)))}
">=" {$filterCollection.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsGreaterThanOrEqualTo($itm.Key,$itm.Value.Value)))}
"!=" {$filterCollection.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsNotEqualTo($itm.Key,$itm.Value.Value)))}
"=" {$filterCollection.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo($itm.Key,$itm.Value.Value)))}
"contains" {$filterCollection.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+ContainsSubstring($itm.Key,$itm.Value.Value)))}
}
}else{
$filterCollection.Add((New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo($_.Key,$_.Value)))
}
}
while($moreItems){
$result = $service.FindItems($id,$filterCollection,$view)
if ($result.TotalCount -gt 0){
$resultSet += $result.Items
}
$view.Offset = $result.NextPageOffset
$moreItems = $result.MoreAvailable
}
}else{
while($moreItems){
$result = $service.FindItems($id,$view)
if ($result.TotalCount -gt 0){
$resultSet += $result.Items
}
$view.Offset = $result.NextPageOffset
$moreItems = $result.MoreAvailable
}
}
if ($resultSet.Count -gt 0){
return $resultSet
}
}
# Mit Service verbinden
$svc = ConnectTo-EWS -Server "ex.domain.tld" -UseScriptCredentials $false -Credential (New-Object PSCredential('MYUSER',(ConvertTo-SecureString 'GEHEIM' -AsPlainText -Force)))
# alle Regeln (inkl. OOF-Regeln) der Inbox einer bestimmten Mailbox abfragen
$result = Get-EWSFolder -mailbox 'user@domain.tld' -storeroot Inbox -service $svc | Get-EWSFolderItems -filter @{[Microsoft.Exchange.WebServices.Data.ItemSchema]::ItemClass = "IPM.Rule.Message"} -traversal Associated
$result
Grüße Uwe
Zitat von @chris123:
Vielen Dank, das hat mir geholfen. Ich werde MFCMAPI nutzen. Visual Studio habe ich leider nicht.
Wie kommst du auf Visual Studio? Das oben ist reiner Powershell-Code und lädt nur die EWS DLL, VS überflüssig .Vielen Dank, das hat mir geholfen. Ich werde MFCMAPI nutzen. Visual Studio habe ich leider nicht.