none
E-Mail Adresse entfernen, Powershell

    Question

  • moin,

    irgendwie funktioniert der Code leider nicht.

    wir haben noch eine Altlast bei den E-Mail Adressen. Es gab früher einmal zu SMTP: auch noch eine MRS: Adresse. Diese möchte ich gerne entfernen

    $Mailboxen = get-mailbox demo3 
    $EMailAdressen = $Mailboxen.EmailAddresses 
    
    foreach($MailAdresse in $EMailAdressen){
        if($MailAdresse -like 'MRS:*'){
    
           set-mailbox $Mailboxen -EmailAddresses @{remove=$MailAdresse}
        }
    }

    Cannot process argument transformation on parameter 'Identity'. Cannot convert value "demo3" to type

    "Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter". Error: "Cannot convert hashtable to an object of the following type:

    Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter. Hashtable-to-Object conversion is not supported in restricted language mode or a Data

    section."

        + CategoryInfo          : InvalidData: (:) [Set-Mailbox], ParameterBindin...mationException

        + FullyQualifiedErrorId : ParameterArgumentTransformationError,Set-Mailbox



    Chris

    Wednesday, May 2, 2018 6:27 AM

Answers

  • Moin,

    nimm anstellen von:

    set-mailbox $Mailboxen -EmailAddresses @{remove=$MailAdresse}
    ein;

    set-mailbox $Mailboxen.DistinguishedName -EmailAddresses @{remove=$MailAdresse}
    Hinweis: Dein Beispiel funktioniert so nur mit einer Mailboxe, für mehrere Mailboxen braucht es eine weitere Schleife. Bessere wäre es daher, von vornherein das Programm so zu erstellen, dass die Anzahl der Mailboxen egal ist. Also immer mit einem Array von Mailboxen arbeiten, auch wenn sich darin nur ein Treffer befindet:
    $Mailboxen = @(get-mailbox demo3)




    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    • Marked as answer by -- Chris -- Wednesday, May 2, 2018 8:18 AM
    Wednesday, May 2, 2018 7:37 AM

All replies

  • Moin,

    nimm anstellen von:

    set-mailbox $Mailboxen -EmailAddresses @{remove=$MailAdresse}
    ein;

    set-mailbox $Mailboxen.DistinguishedName -EmailAddresses @{remove=$MailAdresse}
    Hinweis: Dein Beispiel funktioniert so nur mit einer Mailboxe, für mehrere Mailboxen braucht es eine weitere Schleife. Bessere wäre es daher, von vornherein das Programm so zu erstellen, dass die Anzahl der Mailboxen egal ist. Also immer mit einem Array von Mailboxen arbeiten, auch wenn sich darin nur ein Treffer befindet:
    $Mailboxen = @(get-mailbox demo3)




    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    • Marked as answer by -- Chris -- Wednesday, May 2, 2018 8:18 AM
    Wednesday, May 2, 2018 7:37 AM
  • danke,

    hat funktioniert

    bin noch am TESTEN, daher derzeit nur für eine Demo3 Mailbox.


    Chris

    Wednesday, May 2, 2018 8:18 AM
  • > bin noch am TESTEN, daher derzeit nur für eine Demo3 Mailbox

    Auch beim Testen kann man die Schleifen schon richtig bauen, sonst testest Du danach alles nochmal.


    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    Wednesday, May 2, 2018 8:21 AM
  • stimmt, die Tipp mit $Mailboxen = @(get-mailbox demo3) ist cool

    Danke


    Chris

    Wednesday, May 2, 2018 8:22 AM
  • leider doch noch ein kleiner Fehler? Kommt das jetzt durch das zusätzliche Array am Anfang?

    MRS:047754@Zentrale.S


    Cannot process argument transformation on parameter 'Identity'. Cannot convert the "System.Collections.ArrayList" value of type

    "System.Collections.ArrayList" to type "Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter".

        + CategoryInfo          : InvalidData: (:) [Set-Mailbox], ParameterBindin...mationException

        + FullyQualifiedErrorId : ParameterArgumentTransformationError,Set-Mailbox

    $Mailboxen = @(get-mailbox -database user) 
    $EMailAdressen = $Mailboxen.EmailAddresses 
    #$EMailAdressen
    foreach($MailAdresse in $EMailAdressen){
        if($MailAdresse -like 'MRS:*'){
           write-host $MailAdresse -ForegroundColor green
           set-mailbox $Mailboxen.DistinguishedName  -EmailAddresses @{remove=$MailAdresse}
        }
    }


    Chris

    Wednesday, May 2, 2018 8:34 AM
  • [solved]

    habe jetzt doch wieder eine Schleife mit einem Objekt gemacht. Beim Array (dein Beispiel) bekommt man ja vermutlich einen ArrayString zurück.

    $Mailboxen = get-mailbox -database user 
    foreach($Mailbox in $Mailboxen){
    
        $EMailAdressen = $Mailbox.EmailAddresses 
        #$EMailAdressen
        foreach($MailAdresse in $EMailAdressen){
            if($MailAdresse -like 'MRS:*'){
               write-host $MailAdresse -ForegroundColor green
               set-mailbox $Mailbox.DistinguishedName  -EmailAddresses @{remove=$MailAdresse}
            }
        }
    
    }


    Chris

    Wednesday, May 2, 2018 8:41 AM
  • > habe jetzt doch wieder eine Schleife mit einem Objekt gemacht.

    Ich hatte vorher gesagt, dass Du noch eine Schleife brauchst.

    > Beim Array (dein Beispiel) bekommt man ja vermutlich einen ArrayString zurück.

    Nein, es kommt kein "String", sondern ein Array mit den Objekten zurück, die man reinschüttet.


    Hier:
    $Mailboxen = get-mailbox -database user

    Das funktioniert nur, solange aus der Datenbank "user" mehr als eine Treffer kommt.

    Die drei Ergebnismöglichkeiten sind
    keine Postfächer = $null
    ein Postfach = das Objekt des Postfachs
    mehr als ein Postfach = ein Array mit den Objekten

    -> nur einmal ein Array

    Stattdessen zwingt man die Ausgabe in ein Array:
    $Mailboxen = @(get-mailbox -database user)

    Die drei Ergebnismöglichkeiten sind:
    keine Postfächer = Array mit 0 Zeilen
    ein Postfach = Array mit einer Zeile
    mehr als ein Postfach = Array mit mehreren Zeilen

    -> immer ein Array




    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    Wednesday, May 2, 2018 10:38 AM