Donnerstag, 14. Februar 2019

Gruppenrichtlinien-Cache zurücksetzen

Wenn sich ein Computer nicht mehr mit den Domänencontrollern synchronisiert oder GPO-Fehler in den Ereignisprotokollen auftreten, dann kann es nützlich sein den Cache zu leeren.

Der Cache liegt auf dem Computer unter und kann gelöscht werden

"%ALLUSERSPROFILE%\Application Data\Microsoft\Group Policy\History\*.*"

danach noch ein gpupdate /force

ausführen und schon ist alles wieder synchronisiert.

Das ganze geht natürlich auch mittels Script

DEL /S /F /Q "%ALLUSERSPROFILE%\Application Data\Microsoft\Group Policy\History\*.*"
gpupdate /force

Kopie im Ordner "Gesendete Objekte"

Sobald man als Benutzer die Berechtigungen hat, Mails im Auftrag von oder mit Senden als zu verschicken, dauert es nicht lang bis der Wunsch auf kommt, dass man diese gesendeten Mails zusätzlich im Ordner "Gesendete Objekte" des Urspungspostfachs haben möchte und nicht nur in seinem eigenen.

Auch das geht wunderbar mit der Powershell.

Wenn der Benutzer Senden als Berechtigungen hat.

Set-MailboxSendItemsConfiguration BenutzerB -SendAsItemsCopiedTo SenderAndFrom

Und für Im Auftrag von Senden

Set-MailboxSendItemsConfiguration BenutzerB -SendOnBehalfItemsCopiedTo SenderAndFrom

Ab Exchange 2013 CU9 sieht der Befehl etwas anders aus

Get-Mailbox SharedMailboxAlias | Set-Mailbox -MessageCopyForSentAsEnabled $true -MessageCopyForSendOnBehalfEnabled $true

 Will man nun überprüfen, ob alles richtig eingestellt ist, geht das einfach mit

Get-MailboxSentItemsConfiguration BenutzerB

Senden Als und Senden im Auftrag von

Seit Exchange 2010 ist es sehr einfach Benutzern das Recht zu geben Mails für ein anderes Postfach zu senden.
Es gibt einmal die Option "Senden als", wo die Mails so aussehen, als ob sie direkt vom Absender kommen und es gibt die Option "Senden im Auftrag von", wo klar erkennbar ist, dass Sender A im Auftrag von Sender B die Mail gesendet hat.

Über die Powershell geht es sehr schnell. Dafür einfach folgendes ausführen.

Für senden als

Add-ADPermission BenutzerB -User BenutzerA -Extendedrights "Send As“

Für Senden im Auftrag von

Set-Mailbox BenutzerB -GrantSendonBehalfTo BenutzerA

Für Verteilergruppen geht es natürlich genauso. Die Befehle dafür lauten

für senden als

Add-AdPermission "MeinVerteiler" –ExtendedRights "Send As" -User BenutzerA

Für Senden im Auftrag von

Set-DistributionGroup MeinVerteiler -GrantSendonBehalfTo BenutzerA

Dienstag, 12. Februar 2019

Exchange 2010 - Fehlermeldung ProxyWebRequest - ID 4002 MSExchange Availability

Ich habe auf einem Mailserver immer mal wieder im Eventlog die Fehlermeldung 4002 gesehen.

Prozess '4448': Fehler bei 'ProxyWebRequest CrossSite from S-1-1-0 to https://CAS-SERVER:443/ews/exchange.asmx'. Anrufer-SIDs: NetworkCredentials. Die zurückgegebene Ausnahme ist 'Microsoft.Exchange.InfoWorker.Common.Availability.ProxyWebRequestProcessingException: System.Net.WebException: Die Anfrage wurde abgebrochen: Die Anfrage wurde abgebrochen..
   bei System.Web.Services.Protocols.WebClientAsyncResult.WaitForResponse()
   bei System.Web.Services.Protocols.WebClientProtocol.EndSend(IAsyncResult asyncResult, Object& internalAsyncState, Stream& responseStream)
   bei System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)
   bei Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.Service.EndGetUserAvailability(IAsyncResult asyncResult)
   bei Microsoft.Exchange.InfoWorker.Common.Availability.FreeBusyApplication.EndProxyWebRequest(ProxyWebRequest proxyWebRequest, QueryList queryList, Service service, IAsyncResult asyncResult)
   bei 
   --- Ende der internen Ausnahmestapelüberwachung ---
. Name of the server where exception originated: MAILSERVER'. Stellen Sie sicher, dass der Active Directory-Standort/die Active Directory-Gesamtstruktur mit dem Benutzerpostfach mindestens einen lokalen Exchange 2010-Server aufweist, der den Verfügbarkeitsdienst ausführt. Aktivieren Sie die Protokollierung für den Verfügbarkeitsdienst, und prüfen Sie die grundlegende Netzwerkkonnektivität. 



Die Ursache ist ein Berechtigungsproblem, das man mit Powershell schnell lösen kann.

Get-ClientAccessServer | Add-ADPermission -AccessRights ExtendedRight -ExtendedRights "ms-Exch-EPI-Token-Serialization" -User "MyDomain.com\Exchange Servers"

Donnerstag, 24. Januar 2019

Exchange Datenbankverteilung der Clientzugriffsserver

Einige Benutzer klagen über Verbindungsabbrüche von Outlook.

Mit einer Abfrage von

Get-MailboxDatabase | 
Select Name, RpcClientAccessServer, Server | 
Sort RpcClientAccessServer


sah ich, dass fast alle Datenbank auf einem CAS lagen.
Da wir kein CAS-Array im Einsatz haben, habe ich die Datenbankenzuordnung manuell mit

set-MailboxDatabase -id Datenbankname -RpcClientAccessServer 'CAS-Servername'

verschoben.

Und siehe da, keine Verbindungsabbrüche mehr.

Welches Postfach ist mit Automapping beim User eingebunden

Wir hatten immer die Probleme, dass einige Admins die Postfächer mit Automapping konfiguriert hatten. Sobald aber die zusätzlichen Postfächer größer und größer wurden um so schlimmer wurden die Probleme mit Outlook.
Und da nun kein Mensch der Welt bei 3000 Usern in jedes Outlook gucken wollte, habe ich ein kleines Powershell-Script geschrieben, dass und die Informationen zeigt, welches Postfach mit welchem Outlook per Automapping verbunden ist. Die Ergebnisse werden in einer CSV abgelegt.

Get-ADUser -Filter * -Properties msexchdelegatelistlink |
where {$_.msexchdelegatelistlink -ne ""} |
Select-Object name,{$_.msexchdelegatelistlink} |
export-csv c:\temp\AutoMapping.csv

Freitag, 18. Januar 2019

MSExchange Web Services Event ID 5,6,7

Mein Eventlog auf dem Cas-Server war voll mit folgender Fehlermeldung

Nach 5 erfolglosen Versuchen, eine Benachrichtigung für Abonnement [GQBrYmJ2bS1rYmJjYXMwMS5rYmIuaW50ZXJuEAAAAC/hS9ooXFpLgVRDzl0kBVzpzB/pPH3WCA==] an Endpunkt [https://push-ews.aqua-mail.com/ews/v2/6dcf07ba47be847e58363766766da458a591403b/00000033/f773a4742cedebb26993c6b8418bc1a050d1406a/7f6606000536a0cda7f0502b14f48cf4c313615e] zu senden, wurde das Abonnement entfernt. Details: WebException: Die zugrunde liegende Verbindung wurde geschlossen: Unerwarteter Fehler beim Senden.. Status: SendFailure    bei System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   bei Microsoft.Exchange.Services.Core.NotificationServiceClient.HandleResponse(IAsyncResult responseAsyncResult)







Die Lösung des Problem ist ganz einfach.

Den IIS-Manager starten und zu EWS navigieren.

Dort dann bei Authentifizierung, die Windows-Authentifizierung aktivieren.





Freitag, 4. Januar 2019

Active Directory Felder abgleichen

Bei uns wurden die AD-Felder nicht richtig gepflegt und so kam es vor, dass mal der Jobtitel in der Beschreibung zu finden war und mal bei der Position.
Wir einigten uns darauf, dass nun nur noch das Feld "Beschreibung" richtig ist und somit mussten alle Informationen von Beschreibung in Position überführt werden.

Das gibt einfach mit einem Powershell-Script.

get-aduser -filter * -properties * | select-object samaccountname,GivenName,sn,title,description| export-csv C:\temp\export-user-all.csv -notypeinformation -delimiter ";" -encoding utf8;


Damit habe ich mir erstmal die aktuellen Einstellungen gesichert, falls es zu Problemen kommen sollte.
Und nun wird das Feld Position einfach mit den Werten aus Beschreibung überschrieben.

$Users = Import-Csv C:\temp\export-user-all.csv -Delimiter ';'

ForEach ($User in $Users){
Set-AdUser -Identity $User.sn -title $User.Description
}

Donnerstag, 3. Januar 2019

Ordnerberechtigungen auslesen

Natürlich kann man auch mit Powershell sich Ordnerberechtigungen anzeigen lassen.

Das geht mit einer simplen Zeile


(get-acl 'ORDERPFAD').Access | Select-Object -ExpandProperty IdentityReference

Exchange Automapping deaktivieren/aktivieren

Manchmal kommt es vor, dass man das Automapping von Postfächern nicht haben möchte.

Um das zu deaktivieren muss man einfach folgenden Befehl im Powershell ausführen. Zugleich bekommt der Admin Vollzugriff.

Add-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010
Get-Module ActiveDirectory

Add-MailboxPermission -Identity USERNAME -User Administrator -AccessRights Fullaccess -AutoMapping:$false


Um nun wieder wieder Automapping zu aktivieren einfach das $false gegen ein $true austauschen

Add-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010
Get-Module ActiveDirectory

Add-MailboxPermission -Identity USERNAME -User Administrator -AccessRights Fullaccess -AutoMapping:$true

Freitag, 21. Dezember 2018

Inaktive Computer im Active Directory finden

Es kann immer mal wieder vorkommen, dass ein Computer im ewigen Hardware-Himmel ist, und kein Admin den aus dem AD gelöscht hat. Nun kann man natürlich versuchen sich zu erinnern, welche Computernamen es noch gibt oder einfach einen Praktikanten in alle Büros schicken um das Problem zu lösen. Aber besser ist es doch, wenn man das per Powershell abfragt.

Dafür haben wir zwei möglichkeiten. Die erste zeigt uns einfach alle Computernamen, die sich die letzen 380 Tage nicht mehr beim AD gemeldet haben

Search-ADAccount -AccountInactive –Timespan 380 –ComputersOnly | Sort-Object | FT Name -A

Die zweite Version zeigt uns das etwas ausführlicher. Und zwar wird hier nach allen Computern gesucht, die sich seit mehr als einem Jahr nicht mehr beim AD gemeldet haben  -inklusive, wann sie sich das letzte Mal gemeldet haben.

$d = (Get-Date).addDays(-365)
Get-ADComputer -Property LastLogonDate -Filter {lastLogonDate -lt $d} |
select DNSHostName, LastLogonDate

Exchange 2010 Adressbuch aktualisieren

Immer wieder kommt es vor, dass das Adressbuch im Outlook nicht aktuell ist.  Nun kann man natürlich warten bis der Exchange das irgendwann von allein macht oder aber ein Powershell-Script dafür schreiben.

Add-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction SilentlyContinue

get-addresslist | update-addresslist
get-globaladdresslist | update-globaladdresslist
get-offlineaddressbook | update-offlineaddressbook


Der CAS-Server muss natürlich auch aktualisiert werden. Das geht einfach mit

Update-FileDistributionService -server CAS-SERVERNAME 

Alternativ geht auch

Get-ClientAccessServer | Update-FileDistributionService

Wenn dann alle Server aktuell sind, muss nur noch das Adressbuch im Outlook aktualisiert werden. Dafür einfach auf

Senden/Empfangen -> Senden-Empfangen-Gruppen -> Adressbuch herunterladen...

FERTIG!

Abgelaufene Konten deaktivieren

Jeder kennt es, die Konten laufen ab und trotzdem sind sie nicht vom 1st Level Support deaktiviert worden. Schließlich gibt es Hersteller, die ihre Lizenzgebühren nach aktiven Konten berechnen.
Deswegen habe ich mir dafür ein Script geschrieben, dass nun täglich die Arbeit übernimmt.

Import-Module ActiveDirectory
Search-ADAccount -AccountExpired -UsersOnly | Where-Object {$_.Enabled}| Disable-ADAccount