holzwurmch
Goto Top

Informationen aus ASCII Datei auslesen und weiterverarbeiten mit Powershell

Schönen Guten Abend

Ich möchte meine Papenheimer hier überwachen und schreibe dazu ein Script, welches das ActiveSync Log auswerten soll und alle jene anzeigt, die Mails synchronisieren. Kontakte und Kalender sind ok, aber eben keine Mails... da sich dies nicht separat sperren lässt, müssen wir den Mitarbeitern vertrauen, das sie nicht auch Mails synchronisieren. Leider hat sich gezeigt, das vertrauen nicht genug ist, so das eine Kontrolle notwendig wird.
Habe nun herausgefunden, das bei Mailsynchronisation via ActiveSync auf dem Exchange ein Eintrag im Log generiert wird und habe die in Frage kommenden Zeilen (sind ja nur noch wenige) in eine neue Logdatei geschrieben.

Nun gehts darum diese neue Logdatei mit dem AD abzugleichen um herauszufinden, welche nicht berechtigten User schummeln.

Brauche dazu eure Hilfe:

Hier 2 Zeilen aus meiner Ascii Datei:

2012-01-09 17:17:21 10.0.x.y POST /Microsoft-Server-ActiveSync/default.eas User=ambrosis&DeviceId=Appl77777777&DeviceType=iPhone&Cmd=Sync&Log=V140_Fc1_Fid:21_Ty:Em_Filt2_St:S_Sk:1289577099_Sst7_SsCmt7_Srv:1a0c0d0s0eA0sd_BR1_BPR0_LdapC2_LdapL312_RpcC26_RpcL46_Pk585510728_S1_As:AllowedG_Mbx:mailserver.domain.net_Dc:DC1.domain.net_Throttle0_Budg(A)Conn%3a0%2cHangingConn%3a0%2f%2PC%3a%24null%2f%24null%2f0%25%2cFC%3a1000%2f0%2cPolicy%3aDefaultThrottlingPolicy%5F5b6fc680-86c1-4ba8-809c-60182f7e8de0%2cNorm_ 443 domain-ag\ambrosis 10.0.x.y Apple-iPhone4C1/901.405 200 0 0 390
2012-01-09 17:21:30 10.0.x.y POST /Microsoft-Server-ActiveSync/default.eas Cmd=Sync&DeviceId=BA7FCB7103&DeviceType=WP&Log=V140_Fc3_Fid:19_Ty:Em_Filt3_St:R_Sk:1796167908_Sst4_SsCmt4_Srv:1a0c0d0s0e0sd_BR1_BPR0_Fid:7_Ty:Ca_Filt4_St:S_Sk:1441586711_Sst53_SsCmt53_BR1_BPR0_Fid:8_St:S_Sk:145344363_LdapC5_LdapL625_RpcC50_RpcL187_Pk818513548_S1_As:AllowedG_Mbx:mailserver.domain.net_Dc:DC1.domain.net_Throttle0_Budg(A)Conn%3a0%2cHangingConn%3a0%2cAD%3a%24null%2f%24null2cRPCull2f%24null%2f025%2cFC%3a1000%2f0%2cPolicy%3aDefaultThrottlingPolicy%5F5b6fc680-86c1-4ba8-809c-60182f7e8de0%2cNorm_&Translated=T 443 domain-ag\brosis 10.0.x.y - 200 0 0 1078

Was mich nun aus der Datei interessiert ist das Datum zu Beginn der Zeile und der Username mit der Domain. Den Usernamen möchte ich dann mit einer AD Gruppe abgleichen, so das berechtigte User nicht angezeigt werden.
Hilfe brauche ich aber erstmal nur für den Teil, mit dem ich via Powershell zu Datum und Uhrzeit und Username komme. Den Rest such ich dann selber weiter. Hab mir auch ein Buch bestellt zum Thema, aber vielleicht hat ja einer sowas schon gemacht??

Besten Dank für eure Hilfe!
T Holzwurm

Content-Key: 178691

Url: https://administrator.de/contentid/178691

Printed on: April 25, 2024 at 10:04 o'clock

Member: HolzwurmCH
HolzwurmCH Jan 17, 2012 at 10:16:33 (UTC)
Goto Top
Falls es jemanden interessiert:

# Januar 2012

# Definieren von Konstanten
# Domänenname
$aDomainName = "mydomainname"  
# Textdatei mit Kürzel der Berechtigten Usern
$UserListFile = "C:\Scripts\UserListAllowedMailSync.txt"  
# Evtl. Pfadänderungen im Makro anpassen!

# Userliste der berechtigten User erstellen
# Beispiel 1 mit einer Distributiongroup: Liefert leider nur ausgeschriebene Namen und keine Kürzel
# Beispiel 2 mit AD Abfrage: Dies funktioniert wohl nur auf einem DC mit Windows 2008 R2 (nicht getestet)
# Beispiel 3: Die User werden aus einer Textdatei gelesen (nur Kürzel ohne Domainnamen verwenden)
# $UserList = Get-DistributionGroupMember -Identity "Exchange-ActiveSync-Users" 
# $UserList = Get-ADGroupMember -Identity "Exchange-ActiveSync-Users" -recursive 
$UserList = Get-content $UserListFile
# Write-Output $UserList


# Vortagesdatum wird zusammengestellt
$a = Get-Date
$b = $a.AddDays(-1)
$b = $b.Day
$c = $a.Month
$d = $a.Year
$a = Get-Date "$b/$c/$d" -uformat "%y%m%d"  

# Verzeichnis und Pfad der täglichen IIS Logdateien
$filepath = "C:\inetpub\logs\LogFiles\W3SVC1\u_ex$a.log"  
Write-Output $filepath

# Alle Einträge wo Mails synchronisiert wurden, werden aussortiert (über den Suchtext "Ty:Em") 
# und in einer neuen Logdatei gespeichert
$LogFileName = "c:\Scripts\Reports\ControlEMailSync$a.log"  
select-string -path $filepath -pattern "Ty:Em" -casesensitive | ForEach-Object {$_.Line} > $LogFileName  

# Aus der neuen Logdatei interessieren uns der Name des Users und der Zeitpunkt der Synchronisation
$dateiinhalt = Get-content $LogFileName
$iAll = 0
$iNotAllowed = 0
# Dateiinhalt Zeilenweise durchgehen
$dateiinhalt | Foreach-Object { $iAll++; 
# Das Datum und die Zeit stehen in die ersten 16 Zeichen
$aDatum = $_.Substring(0,16); 
# Der User muss gesucht werden, beginnt aber in jedem Fall mit dem Domain Namen
$aUser = $_.Substring($_.IndexOf($aDomainName),35);
# Hier wird der Username von dem restlichen Text getrennt
$aDomainl = $aDomainName.length + 1
$aPos = $aUser.IndexOf(" ")-$aDomainl  
$aUser = $aUser.Substring($aDomainl,$aPos);

# Ausgabe der nicht Berechtigten User
if ($UserList -notcontains $aUser) {$iNotAllowed++; Write-Output "$aDatum $aUser"}  
} 

Write-warning "Anzahl Synchronisationen unberechtigter User: $iNotAllowed"  
Write-warning "Anzahl Synchronisationen Total: $iAll"  


Die Auswertung funktioniert sowohl mit IPhone's wie auch mit Windows Mobile Smartphones
Ist die Userliste leer, werden halt alle User angezeigt die via Exchange ActiveSync EMails synchronisieren...


Gruss
Holzwurm