Donnerstag, 23. November 2017

Exchange Postfach Export bei ungleichem UPN zu Email Adresse

Hallo zusammen,

es kommt immer wieder vor, dass ein PST Postfach Export durchgeführt werden muss, bei dem der UPN nicht der Email Adresse entspricht. Gerade in einer cloudlastigen Zeit wird erwartet, dass der UPN der email Adresse entspricht um Benutzer beispielsweise ein single sign on für diverse Dienste anbieten zu können.

Warum nun dieses Script, es gab die Anforderung dass für eine Exchange Cross Forest Migration die Postfächer in PST Dateien exportiert wurden und diese dann automatisiert über ein Import Script in der Ziel Seite wieder importiert wurden. In der Zielseite wurde allerdings der UPN der Email Adresse gleichgesetzt. Das unten stehenden Script zieht sich nun anhand das AD Benutzer die Email Adresse und schreibt die Email Adresse in den Dateinamen rein um eine eindeutige Identifikation des Postfachs zu erhalten. Das Script funktioniert ab der Version Exchange 2010.

### PST Export für O365 Import bei unterschiedlichem UPN zu Email Adresse
#import-module activedirectory
#Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

$Workload = "Exchange"
$Archiv = "FALSE"
$TargetRootFolder = "/"
$Date = (Get-Date).ToString('MM-dd-yyyy-HH-mm-ss')
$BasePath = "\\servername\g$\archive"
$ExportPath = $BasePath +"PSTs-" +$Date + "\"
$OutputFile = $BasePath +"Mailbox-O365" +"-" +$Date +".csv"
$ResultSize = 1000 #"unlimited"
$FilesCSV = @()
$CSVImportPath = "c:\temp\Migrationsliste.csv"
$UPN = @()
$Mbxsrollout = @()

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
New-Item -ItemType directory -Path $ExportPath -ErrorAction SilentlyContinue

#get-mailbox -OrganizationalUnit $OU

#CSV (Es muss "Kein CSV" oder "CSV" aktiv sein! Nie Beide!)
$FilesCSV += Import-Csv $CSVImportPath
#$Mbxsrollout = $FilesCSV

$FilesCSV
#$FilesCSV.count

foreach ($object in $FilesCSV) {
#$WEA = $object.WindowsEmailAddress
write-host "$object.WindowsEmailAddress in Bearbeitung"
#$Mbxsset = Get-ADUser -Filter "UserPrincipalName -Eq '$WEA'" -Properties *
$Mbxsrollout += get-mailbox -Identity $object.WindowsEmailAddress
#$Mbxsrollout

}
#$Mbxsrollout | select *name*
#$Mbxsrollout.count
#$FilesCSV.count
#$Mbxsrollout.count
#$Mbxsrollout

$Files = $Mbxsrollout | Select-Object @{label="Workload";expression={$Workload}}, @{label="FilePath";expression={$FilePath}}, @{label="Name";expression={($_.WindowsEmailAddress.ToString() + ".pst")}}, @{label="Mailbox";expression={($_.PrimarySmtpAddress)}}, @{label="IsArchive";expression={($Archiv)}},@{label="TargetRootFolder";expression={($TargetRootFolder)}},@{label="SPFileContainer";expression={("")}},@{label="SPManifestContainer";expression={("")}},@{label="SPSiteUrl";expression={("")}}
$Files | Export-Csv $OutputFile -NoTypeInformation -Delimiter ","
#$Files

#Kein CSV (Es muss "Kein CSV" oder "CSV" aktiv sein! Nie Beide!)

#$Files = get-mailbox -ResultSize $ResultSize -OrganizationalUnit $OU | Select-Object @{label="Workload";expression={$Workload}}, @{label="FilePath";expression={$FilePath}}, @{label="Name";expression={($_.Name + ".pst")}}, @{label="Mailbox";expression={($_.PrimarySmtpAddress)}}, @{label="IsArchive";expression={($Archiv)}},@{label="TargetRootFolder";expression={($TargetRootFolder)}},@{label="SPFileContainer";expression={("")}},@{label="SPManifestContainer";expression={("")}},@{label="SPSiteUrl";expression={("")}}
#$Files | Export-Csv $OutputFile -NoTypeInformation -Delimiter ","
#$Files


foreach ($MB in $Files){
#[String]$MBName = $MB.Mailbox.local + "@" +$MB.Mailbox.Domain
#[String]$MBName = $MB.Mailbox.local + "@" +$MB.Mailbox.Domain
#[String]$MBName
#$MB.Mailbox
New-MailboxExportRequest -BadItemLimit 1000 -AcceptLargeDataLoss -mailbox $MB.Mailbox.ToString() -Domaincontroller %DomainController% -FilePath $ExportPath\$($MB.Name)
}

Write-Output "Der Pfad für den Folgeschritt Import lautet: " $ExportPath

Write-Output "`nDie zugehörige PST-Importzuordnungsdatei wurde hier abgelegt: " $OutputFile

#Skript erwartet bei CSV-Datei als Header: ("# " am Anfang beim Kopieren entfernen)
# #TYPE Selected.Microsoft.Exchange.Data.Directory.Management.Mailbox
# "WindowsEmailAddress"


viele Grüße, Jens

Freitag, 10. November 2017

Überprüfung DNS Einträge für Skype for Business

Hallo zusammen,

immer wieder gibt es ein Problem, dass Skype for Business sind sauber funktioniert, egal ob onpremis oder auch bei O365. Es fällt dabei immer wieder im Troubleshooting auf, dass DNS Einträge nicht bzw. nicht richtig gesetzt sind. 

Aus diesem Grund haben einige Kollegen das nachfolgende PS Script geschrieben um zu prüfen ob und welche DNS relevanten SfB Einträge gesetzt sind:

#Definition der SIP-Domains:
$SipDomain = "contoso.com","fabrikam.com"

#Überprüfung der oben hinterlegten SIP Domains:
$SipDomain
Foreach ($Item in $SipDomain) {
Write-Host "`n`n### Prüfe: ARECORD sip.$item ###`n"
#nslookup -q=a sip.$item
resolve-dnsname -type a sip.$item -ErrorAction SilentlyContinue
Write-Host "`n`n### Prüfe: CNAME sip.$item ###`n"
#nslookup -q=cname sip.$item
resolve-dnsname -type cname sip.$item -ErrorAction SilentlyContinue
Write-Host "`n`n### Prüfe: SRV _sip._tls.$item ###`n"
#nslookup -q=srv _sip._tls.$item 
resolve-dnsname -type srv _sip._tls.$item -ErrorAction SilentlyContinue
Write-Host "`n`n### Prüfe: SRV sipfederationtls._tcp.$item ###`n"
#nslookup -q=srv _sipfederationtls._tcp.$item
resolve-dnsname -type SRV _sipfederationtls._tcp.$item -ErrorAction SilentlyContinue
Write-Host "`n`n### Prüfe: CNAME lyncdiscover.$item ###`n"
#nslookup -q=cname lyncdiscover.$item
resolve-dnsname -type cname lyncdiscover.$item -ErrorAction SilentlyContinue
}

In einem weiteren Eintrag werde ich darauf eingehen welche DNS Einträge für SfB relevant sind.

Viele Grüße, Jens