Autodiscover with Powershell

Hallo zusammen,

Wie Autodiscover funktioniert habe ich schon in verschiedenen Artikeln erklärt

Aber man hat ja nicht immer ein Postman zur Hand. Geht ja auch mit einem PowerShell Script. Man braucht nur die Emailadresse und die Credentials einzugeben.

Das Script habe ich jetzt in einer halben Stunde zusammengeschustert und erhebt keinen Anspruch auf Vollständigkeit. Wenn es funktioniert - Toll. Wenn nicht, dann müsst ihr selbst schauen wie ihr weiterkommt.

###############################################################################
# Exchange Autodiscover with Powershell
# 15.12.2020 V1.0 Initial Version - Andres Bohren
###############################################################################


###############################################################################
#Certificate Validation Overload - TrustAllCertificates
###############################################################################
if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
{
$certCallback = @"
    using System;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    public class ServerCertificateValidationCallback
    {
        public static void Ignore()
        {
            if(ServicePointManager.ServerCertificateValidationCallback ==null)
            {
                ServicePointManager.ServerCertificateValidationCallback +=
                    delegate
                    (
                        Object obj,
                        X509Certificate certificate,
                        X509Chain chain,
                        SslPolicyErrors errors
                    )
                    {
                        return true;
                    };
            }
        }
    }
"@
    Add-Type $certCallback
 }

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
[ServerCertificateValidationCallback]::Ignore()

###############################################################################
# Main Program
###############################################################################
Write-Host "Please Enter EmailAddress" -foregroundColor Green
$EMailAddress = Read-Host "EMailAddress"

Write-Host "Please Enter the Credential for that EmailAddress" -foregroundColor Green
$Cred = Get-Credential

If ($EMailAddress -ne "")
{
 $Domain = $EMailAddress.Split("@")[1]

 #Create Header
 $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
 $headers.Add("Content-Type", "text/xml")
 $headers.Add("X-User-Identity", "$EMailAddress")
 $headers.Add("X-AutoDiscoverArchiveAsSmtp", "True")
 $headers.Add("X-AnchorMailbox", "$EMailAddress")


 $body = "<?xml version=`"1.0`" encoding=`"utf-8`"?>
 `n<Autodiscover xmlns=`"http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006`">
 `n <Request>
 `n  <EMailAddress>$EMailAddress</EMailAddress>
 `n  <AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
 `n </Request>
 `n</Autodiscover>"

 #$Cred = Get-Credential
 $response = Invoke-WebRequest "https://autodiscover.$Domain/autodiscover/autodiscover.xml" -Method "POST" -Headers $headers -Body $body -Credential $Cred
 $response.Content
}

Grüsse
Andres Bohren