Daten aus dem AD company und Exchange SMTP Attribut in CSV speichern
Hallo zusammen,
zunächst einmal möchte ich mich bedanken, dass mir beim letzten Post so schnell geholfen wurde. Ich bräuchte allerdings wieder Eure Unterstützung. Ich habe nun ein Skript, das nach Benutzerkonten der Firma "Testfirma" und der Abteilung "XY" filtert und dort die SMTP Adressen, die mit "*test.de" enden entfernt. Das Skript funktioniert soweit auch. Nun möchte ich allerdings noch die Daten der gelöschten Mitarbeiter (bevorzugt SamAccountName) sowie die SMTP Adressen, die auf "*test.de" enden in eine CSV-Datei speichern, damit man diese in einem extra Skript als Fallback sofort wieder einspielen kann, falls das Löschen zu Problemen führen sollte.
Es wäre also super, wenn man in der CSV eine Auflistung aller Benutzeranmeldenamen und die dazugehörigen SMTP Adressen bekommt, die gelöscht worden sind.
Das Skript ist wie folgt aufgebaut:
Vielleicht hat einer von Euch eine Idee, wie das am einfachsten zu realisieren ist, sodass es immer noch übersichtlich bleibt. Das Skript soll im besten Fall auch vom Helpdesk verstanden werden und anwendbar sein.
Besten Dank im Voraus!
zunächst einmal möchte ich mich bedanken, dass mir beim letzten Post so schnell geholfen wurde. Ich bräuchte allerdings wieder Eure Unterstützung. Ich habe nun ein Skript, das nach Benutzerkonten der Firma "Testfirma" und der Abteilung "XY" filtert und dort die SMTP Adressen, die mit "*test.de" enden entfernt. Das Skript funktioniert soweit auch. Nun möchte ich allerdings noch die Daten der gelöschten Mitarbeiter (bevorzugt SamAccountName) sowie die SMTP Adressen, die auf "*test.de" enden in eine CSV-Datei speichern, damit man diese in einem extra Skript als Fallback sofort wieder einspielen kann, falls das Löschen zu Problemen führen sollte.
Es wäre also super, wenn man in der CSV eine Auflistung aller Benutzeranmeldenamen und die dazugehörigen SMTP Adressen bekommt, die gelöscht worden sind.
Das Skript ist wie folgt aufgebaut:
#Abteilung, Firma und SMTP Domäne definieren
$abteilung = "XY"
$alteFirma = "Testfirma"
$SMTP = "*@test.de"
#Mitarbeiter der angegebenen Abteilung u. Firma suchen sowie Export in CSV
$Mitarbeiter = Get-User -WarningAction SilentlyContinue -ResultSize unlimited | ?{$_.Department -eq $Abteilung -and $_.Company -eq $alteFirma} | select SamAccountName
##Hier soll der CSV-Export stehen Bsp.##
<#$mitarbeiter | export-csv C:\Temp\SMTPFallback.csv –NoTypeInformation#>
#User filtern
foreach($user in $Mitarbeiter ){
#SMTP Adressen bei den ermittelten Usern entfernen
Get-Mailbox -ErrorAction SilentlyContinue $user.SamAccountName | %{$_.EmailAddresses | ?{$_ -like $SMTP -and !$_.IsPrimaryAddress}} | %{Set-Mailbox $user.SamAccountName -EmailAddresses @{Remove=$_.ProxyAddressString}}
}
Write-Host "Die SMTP Adressen der Domäne '$SMTP' wurden bei den Mitarbeitern der Abteilung $abteilung entfernt." -ForegroundColor Green | Format-Table -AutoSize
Vielleicht hat einer von Euch eine Idee, wie das am einfachsten zu realisieren ist, sodass es immer noch übersichtlich bleibt. Das Skript soll im besten Fall auch vom Helpdesk verstanden werden und anwendbar sein.
Besten Dank im Voraus!
Please also mark the comments that contributed to the solution of the article
Content-ID: 7894315981
Url: https://administrator.de/contentid/7894315981
Printed on: October 11, 2024 at 02:10 o'clock
17 Comments
Latest comment
Hi,
dafür musst Du nur den Block
erweitern, sodass diese Informationen auch abgespeichert werden.
z.B. zunächst einmal nur auf Console ausgeben
E.
dafür musst Du nur den Block
%{Set-Mailbox $user.SamAccountName -EmailAddresses @{Remove=$_.ProxyAddressString}}
erweitern, sodass diese Informationen auch abgespeichert werden.
z.B. zunächst einmal nur auf Console ausgeben
%{
Try {
Set-Mailbox $user.SamAccountName -EmailAddresses @{Remove=$_.ProxyAddressString}
$user.SamAccountName + "`t" + $_.ProxyAddressString
}
Catch {}
}
E.
Da ich ja nicht weiß, wie Dein Code aktuell aussieht, kann ich nicht sagen, was Du ändern müsstest.
Wenn man angibt:
dann landet in blablabla auch nur
oder
Es gibt auch noch andere Möglichkeiten.
Wenn man angibt:
$Wort = "Hallo"
$Wort | Out-File blablabla
Hallo
Wenn Du mit Out-File aber"Hallo"
haben willst, dann musst Du das auch so ausgeben. z.B."""$Wort""" | Out-File blablabla
"""" + $Wort + """" | Out-File blablabla
"""" + $user.SamAccountName + """" + ", " + """" + $_.ProxyAddressString.Split(":")[1] + """"
"""" + $user.SamAccountName + """, """ + $_.ProxyAddressString.Split(":")[1] + """"
"""$($user.SamAccountName)"", ""$($_.ProxyAddressString.Split(":")[1])"""
Ich habe in
$_.ProxyAddressString.Split(":")[1]
#User filtern
$Backup = {
"SamAccountName","ProxyAddressString"
foreach($user in $Mitarbeiter ){
....
}
$Backup | Out-File C:\Temp\SMTPFallback.txt
}
#User filtern
$Backup = @()
$Backup += """SamAccountName"", ""ProxyAddressString"""
foreach($user in $Mitarbeiter ){
....
$Backup += """$($user.SamAccountName)"", ""$($_.ProxyAddressString.Split(":")[1])"""
}
$Backup | Out-File C:\Temp\SMTPFallback.txt
Moin.
So ein String-Gebastel macht doch heute keiner mehr, schon gar nicht wenn es eh eine CSV werden soll.
Wofür ist PowerShell objektorientiert?! Also nutze man es auch ...
Gruß siddius
So ein String-Gebastel macht doch heute keiner mehr, schon gar nicht wenn es eh eine CSV werden soll.
Wofür ist PowerShell objektorientiert?! Also nutze man es auch ...
#Abteilung, Firma und SMTP Domäne definieren
$abteilung = "XY"
$alteFirma = "Testfirma"
$SMTP = "*@test.de"
#Mitarbeiter der angegebenen Abteilung u. Firma suchen sowie Export in CSV
$users = Get-User -Filter "Department -eq '$Abteilung' -and Company -eq '$alteFirma'"
# jeden Mitarbeiter durchlaufen
foreach($user in $users){
# mails filtern
$mails = Get-Mailbox -ErrorAction SilentlyContinue $user.SamAccountName | %{$_.EmailAddresses | ?{$_ -like $SMTP -and !$_.IsPrimaryAddress} | select -Expand ProxyAddressString}
# jede mail verarbeiten
foreach($mail in $mails){
# mail entfernen
Set-Mailbox $user.SamAccountName -EmailAddresses @{Remove=$mail}
# log schreiben
$user | select SamAccountName,@{n='Mail';e={$mail -replace '^smtp:'}} | export-csv .\cleaned_users.csv -delimiter ";" -NoType -Encoding UTF8 -Append
}
}
Write-Host "Die SMTP Adressen der Domäne '$SMTP' wurden bei den Mitarbeitern der Abteilung $abteilung entfernt." -ForegroundColor Green