Benutzer mit den meisten Antworten
Stapelverarbeitung mit Powershell

Frage
-
Dieses Thema ist für mich absolut neu und ich hoffe auf eine kleine Starthilfe:
Über die Powershell möchte ich bei Office 365 / Exchange Online Adresslisten hinzufügen. Folgenden Befehl verwende ich dafür:
New-AddressList -Name "AL_Abteilungsname_Users" -RecipientFilter {((RecipientType -eq 'UserMailbox') -or (RecipientType -eq "MailUniversalDistributionGroup") -or (RecipientType -eq "DynamicDistributionGroup")) -and (CustomAttribute15 -eq "Abteilungsname")}
Ich habe nun eine Liste mit 100 Abteilungsnamen in einer CSV-Datei. Diese möchte ich im Stapelverfahren abarbeiten und in dem oben genannten Befehl "Abteilungsname" ersetzen durch die 100 Werte aus der CSV-Datei.
Dass man hierfür die ForEach-Schleife nimmt, habe ich schon nachgelesen, jedoch schaffe ich es nicht, die einzelnen Werte zu nutzen.
Kann mir jemand da einen Tipp geben? Danke im Voraus
Antworten
-
Hi,
get-Mailbox liefert nicht das Attribut Department zurück. Alle Attribute siehst du mit get-Mailbox -identity <Benutzer> | fl
Man muss hier einen Umweg gehen:
http://smtp25.blogspot.de/2009/07/powergui-get-mailbox.html
Würde dann irgendwie so aussehen, wenn es mit O365 so geht:
Get-Mailbox -resultsize unlimited | select @{Name="User Name";expression={$_.displayname}},@{Name="Department";expression={(get-msoluser $_.alias).department}}}
Gruß
Christian
Christian Groebner MVP Forefront
- Als Antwort markiert FlorianLG Donnerstag, 11. Februar 2016 16:12
Alle Antworten
-
Hi,
den Inhalt der CSV-Datei kannst du mit $lists = Get-Content -Path <Dateiname> auslesen und dann mit
foreach ($list in $lists)
{
New-AddressList -Name "$list" -RecipientFilter {((RecipientType -eq 'UserMailbox') -or (RecipientType -eq "MailUniversalDistributionGroup") -or (RecipientType -eq "DynamicDistributionGroup")) -and (CustomAttribute15 -eq "$list")}
}
darüber loopen, das sollte so funktionieren.
Gruß
Christian
Christian Groebner MVP Forefront
-
Hi,
ich würde das dann in einer Variablen zwischenspeichern ala:
foreach ($list in $lists) { $foo = $list +"_Users" New-AddressList -Name "$foo" -RecipientFilter {((RecipientType -eq 'UserMailbox') -or (RecipientType -eq "MailUniversalDistributionGroup") -or (RecipientType -eq "DynamicDistributionGroup")) -and (CustomAttribute15 -eq "$list")} }
Alternativ kannst du der Zusammenführung auch direkt machen.
Gruß
Christian
Christian Groebner MVP Forefront
-
Hallo,
ich würde die CSV erstmal importieren und dann prüfen, ob das CustomAttribute15 in der Liste Abteilungsnamen ist. Ich hoffe ich habe deine Frage richtig verstanden.
$Abteilungsnamen = Write-host -NoNewline -Separator ","(get-content C:\Data.csv|convertfrom-csv|convertfrom-csv -header "Abteilungsname").Abteilungsname
New-AddressList -Name "AL_Abteilungsname_Users" -RecipientFilter {((RecipientType -eq 'UserMailbox') -or (RecipientType -eq "MailUniversalDistributionGroup") -or (RecipientType -eq "DynamicDistributionGroup")) -and ($Abteilungsnamen -contains CustomAttribute15)}
Ich hoffe ich konnte dir helfen.
MfG
Jan-Henrik
-
Hallo Jan-Henrik,
ich muss mal definieren, was ich mit Abteilungen meinte.
Es geht um 100 Feuerwehren, die ich in einer CSV-Datei mit ";" als Trennzeichen habe. Die Lösung von Christian war nahezu perfekt. Es gibt nur ein Problem dabei: Das Trennzeichen wird mit in die Variable geschrieben.
Ich habe das hier durchgeführt:
$feuerwehren = Get-Content -Path c:\Office365\Test.csv –Delimiter ';'
C:\WINDOWS\system32> foreach ($list in $feuerwehren)
{
$AL = "AL_"+$list+"_Mitglieder"
$DisName = "FF "+$list+" Mitglieder"
New-AddressList -Name "$AL" -Displayname "$DisName" -RecipientFilter {((RecipientType -eq 'UserMailbox') -or (RecipientType
q "MailUniversalDistributionGroup") -or (RecipientType -eq "DynamicDistributionGroup")) -and (CustomAttribute15 -eq "$list
}Ausgabe:
Name DisplayName RecipientFilter
---- ----------- ---------------
AL_Hamburg;_Mitglieder FF Hamburg; Mitglieder ((((((RecipientType -eq 'UserMailbox') -or (RecipientType -eq 'MailUni...Wie kann ich das Trennzeichen noch loswerden?
-
Hi,
wenn die Orte alle hintereinander durch ; separiert sind, dann geht das mit Import-CSV nicht.
$Liste = Get-Content -Path C:\temp\Liste.txt $Orte = $Liste.Split(";") foreach ($Ort in $Orte) { .. do the magic here :-) }
Gruß
Christian
Christian Groebner MVP Forefront
-
Hi,
eine CSV-DAtei sieht so aus:
München, Dorfweg 3, 80333
Hamburg, Wasserweg 1, 12345
Nürnberg, Platz 1, 90000Hier wäre dann das Trennzeichen das Komma und in den einzelnen Spalten würden Werte zu diesem Datensatz stehen.
In deiner Datei ist das Format anders, hier stehen die Werte hintereinander und nicht pro Zeile ein Datensatz.
Gruß
Christian
Christian Groebner MVP Forefront
-
Christian besteht die Möglichkeit, dass du auf mein Konstrukt einmal drüber schaust? Bin mir da noch nicht 100%ig sicher, weil es doch sehr komplex ist und ich keine Erfahrung damit habe.
Da dort bereits die Daten eingearbeitet sind, wäre es privat am Besten...
-
Da sind ein paar Bestandteile mit drin, die nicht für die Öffentlichkeit sind.
Ich habe auf einem Test-Tenant die Befehle mal durchlaufen lassen, aber es hakt noch etwas.
Ich wollte die ABP zuordnen. Allerdings kann ich die Abteilung nicht filtern.
Get-Mailbox -resultsize unlimited | where {$_.Department -eq "$Ortswehr"} | Set-Mailbox -AddressBookPolicy "$ABPName"
$Ortswehr stammt aus der ForEach-Schleife
Ich habe gerade auch bemerkt, dass die Adresslisten leer sind. Also auch da funktioniert die Zuordnung bzw der Filter nicht.
- Bearbeitet FlorianLG Donnerstag, 11. Februar 2016 09:43
-
Ja, der Wert ist ABP_Celle
Celle ist der letzte Ortsname in der Liste.
Die Adressbuchrichtlinie ABP_Celle existiert auch.
Ich habe zwei Benutzer angemeldet zu der Stadt Magdeburg. Als Abteilung eingetragen Magdeburg.
Die beiden Benutzer können auch die Adresslisten Magdeburg_Mitglieder, Magdeburg_Ressourcen, Kontakte sehen, aber diese Listen sind leer.
Die Adressbuchrichtlinie ist nicht zugeordnet worden, auch nach dem erneuten Ausführen des Befehls nicht. Ich konnte sie aber in der Liste im ECP auswählen.
- Bearbeitet FlorianLG Donnerstag, 11. Februar 2016 10:31
-
Hi,
hast du mal folgendes probiert, vielleicht klappt das mit dem Pipen nicht:
$users = Get-Mailbox -resultsize unlimited | where {$_.Department -eq "$Ortswehr"} foreach ($user in $users) { Set-Mailbox -identity $user -AddressBookPolicy "$ABPName" }
Gruß
Christian
Christian Groebner MVP Forefront
-
Die erste Variante mit Department hat nicht funktioniert. Komischerweise funktioniert es mit CustomAttribute15. Bei "Marko Magdeburg" aus Magdeburg habe ich das CustomAttribute15 auf "Magdeburg gesetzt".
Dann funktioniert es... ?
$AlleFeuerwehren = Get-Content -Path C:\Office365\Test.txt
$Ortswehren = $AlleFeuerwehren.Split(";")
foreach ($Ortswehr in $Ortswehren)
{
$ALBenutzerName = "AL_"+$Ortswehr+"_Benutzer"
$ALBenutzerDis = "FF "+$Ortswehr
$ALRäume = "AL_"+$Ortswehr+"_Räume"
$ALRäumeDis = "FF "+$Ortswehr+" Räume"
$ALRessourcen = "AL_"+$Ortswehr+"_Ressourcen"
$ALRessourcenDis = "FF "+$Ortswehr+" Ressourcen"
$GALName = "GAL_"+$Ortswehr
$OABName = "OAB_"+$Ortswehr
$ABPName = "ABP_"+$Ortswehr
$GALPfad = "\"+$GALName
$OABPfad = "\"+$OABName
$ALRäumePfad = "\"+$ALRessourcen
$users = Get-Mailbox -resultsize unlimited | where {$_.CustomAttribute15 -eq "$Ortswehr"}
Write-Host "Ortswehr: "$Ortswehr" ABPName: "$ABPName
foreach ($user in $users)
{
Write-Host $user
Set-Mailbox -identity "$user" -AddressBookPolicy "$ABPName"
}
}Ausgabe:
Ortswehr: Regensburg ABPName: ABP_Regensburg
Ortswehr: Augsburg ABPName: ABP_Augsburg
Ortswehr: Magdeburg ABPName: ABP_Magdeburg
Marko Magdeburg
Ortswehr: Rotenburg Wümme ABPName: ABP_Rotenburg Wümme
Ortswehr: Celle ABPName: ABP_Celle
- Bearbeitet FlorianLG Donnerstag, 11. Februar 2016 13:01
-
Hi,
ah ok, da war ich zu schnell :-)
foreach ($user in $users) { Write-Host $user.Identity Set-Mailbox -identity $user.Identity -AddressBookPolicy "$ABPName" }
Es muss natürlich $user.Identity heissen.
Gruß
Christian
Christian Groebner MVP Forefront
- Bearbeitet Christian Groebner Donnerstag, 11. Februar 2016 13:01
-
Hi,
get-Mailbox liefert nicht das Attribut Department zurück. Alle Attribute siehst du mit get-Mailbox -identity <Benutzer> | fl
Man muss hier einen Umweg gehen:
http://smtp25.blogspot.de/2009/07/powergui-get-mailbox.html
Würde dann irgendwie so aussehen, wenn es mit O365 so geht:
Get-Mailbox -resultsize unlimited | select @{Name="User Name";expression={$_.displayname}},@{Name="Department";expression={(get-msoluser $_.alias).department}}}
Gruß
Christian
Christian Groebner MVP Forefront
- Als Antwort markiert FlorianLG Donnerstag, 11. Februar 2016 16:12
-
Für die Nachwelt meine Lösung (etwas abgeändert mit Get-User -Filter)
$AlleFeuerwehren = Get-Content -Path C:\Office365\Test.txt
$Ortswehren = $AlleFeuerwehren.Split(";")
foreach ($Ortswehr in $Ortswehren)
{
$ALBenutzerName = "AL_"+$Ortswehr+"_Benutzer"
$ALBenutzerDis = "FF "+$Ortswehr
$ALRäume = "AL_"+$Ortswehr+"_Räume"
$ALRäumeDis = "FF "+$Ortswehr+" Räume"
$ALRessourcen = "AL_"+$Ortswehr+"_Ressourcen"
$ALRessourcenDis = "FF "+$Ortswehr+" Ressourcen"
$GALName = "GAL_"+$Ortswehr
$OABName = "OAB_"+$Ortswehr
$ABPName = "ABP_"+$Ortswehr
$GALPfad = "\"+$GALName
$OABPfad = "\"+$OABName
$ALRäumePfad = "\"+$ALRessourcen
$users = Get-User -Filter "Department -eq '$Ortswehr'"
Write-Host "Ortswehr: "$Ortswehr" ABPName: "$ABPName
foreach ($user in $users)
{
Write-Host $user
Set-Mailbox -identity "$user" -AddressBookPolicy "$ABPName"
}
}Danke Christian für die super Unterstützung!!!