Powershell: Array mit SMTP Adressen verändern und hinzufügen (op Addition)
Hallo zusammen
ich verzweifle gerade gerade an dem Hinzufügen von Werten in ein Array. Bitte nicht auslachen ich Scripte erst seit ein paar Monaten.
Speziell geht es darum die Emailaddressen neu zu setzen mit
set-mailbox $Mailbox -EmailAddresses $SetAddresses
Allerdings möchte die Mailadressen in $Addresses neu bestimmen. Das Filtern der Adressen ist ja kein Problem, aber wie füge ich denn dem Array welche hinzu ?
Ich habe schon einiges versucht, aber es scheitert anscheinend an dem Type [Microsoft.Exchange.Data.SmtpProxyAddress], das erlaubt keine 'op_Addition'
Ich weiß das jetzt einige sagen mach das doch über die EmailAddressPolicy aber das geht leider nicht da diese aus mehreren Gründen vorerst nicht verändert werden darf.
Generell würde ich gerne wissen wie ich die Objekte systemgetreu in das Array bringe ? Es ist anscheinend ein unterschied wie oder was die Objekte erzeugt hat. Ich hatt auch schon mit Add-member herumgespielt und es ist wahrscheinlich der nächste Weg das GANZE Array mit CustomObjects neuzubauen und mit den nötigen Werten zubefüllen. Aber ich würde dennoch gern verstehen wie man das anders hinbekommt. Get-Member scheint ein mächtiges Werkzeug zu sein, aber umgehen kann ich damit noch nicht.
ich verzweifle gerade gerade an dem Hinzufügen von Werten in ein Array. Bitte nicht auslachen ich Scripte erst seit ein paar Monaten.
Speziell geht es darum die Emailaddressen neu zu setzen mit
set-mailbox $Mailbox -EmailAddresses $SetAddresses
Allerdings möchte die Mailadressen in $Addresses neu bestimmen. Das Filtern der Adressen ist ja kein Problem, aber wie füge ich denn dem Array welche hinzu ?
Ich habe schon einiges versucht, aber es scheitert anscheinend an dem Type [Microsoft.Exchange.Data.SmtpProxyAddress], das erlaubt keine 'op_Addition'
Ich weiß das jetzt einige sagen mach das doch über die EmailAddressPolicy aber das geht leider nicht da diese aus mehreren Gründen vorerst nicht verändert werden darf.
Generell würde ich gerne wissen wie ich die Objekte systemgetreu in das Array bringe ? Es ist anscheinend ein unterschied wie oder was die Objekte erzeugt hat. Ich hatt auch schon mit Add-member herumgespielt und es ist wahrscheinlich der nächste Weg das GANZE Array mit CustomObjects neuzubauen und mit den nötigen Werten zubefüllen. Aber ich würde dennoch gern verstehen wie man das anders hinbekommt. Get-Member scheint ein mächtiges Werkzeug zu sein, aber umgehen kann ich damit noch nicht.
## Define Mailbox
$UserMailAddress = "max.muster@musterfirma.com"
$mailbox = get-mailbox $UserMailAddress
$Mailboxuser = get-user $Mailbox
## Get mail addresses
$EmailAddresses = $mailbox.EmailAddresses
## show Emailaddesses
$EmailAddresses
SmtpAddress : muster@olddomain.de
AddressString : muster@olddomain.de
ProxyAddressString : smtp:muster@olddomain.de
Prefix : SMTP
IsPrimaryAddress : False
PrefixString : smtp
SmtpAddress : max.muster@firma.com
AddressString : max.muster@firma.com
ProxyAddressString : SMTP:max.muster@firma.com
Prefix : SMTP
IsPrimaryAddress : True
## get good addresses
$GoodEmailAddresses = ($EmailAddresses | ? {$_.SmtpAddress -like "*Firma.com*" -or $_.SmtpAddress -like "*onmicrosoft.com*"})
## show good addresses
$GoodEmailAddresses
SmtpAddress : max.muster@firma.com
AddressString : max.muster@firma.com
ProxyAddressString : SMTP:max.muster@firma.com
Prefix : SMTP
IsPrimaryAddress : True
## add onmicrosoft addresses
$OnMicrosoftDomain = '@Firma.mail.onmicrosoft.com'
$MailboxAlias =$Mailbox.alias
$OnMicrosoftSMTPAddress = $MailboxAlias+$OnMicrosoftDomain
$SetAddresses = $GoodEmailAddresses + $OnMicrosoftSMTPAddress
Method invocation failed because [Microsoft.Exchange.Data.SmtpProxyAddress] does not contain a method named 'op_Addition'.
At bla.bla.ps1:..
+ $SetAddresses = $GoodEmailAddresses + $OnMicrosoftSMTPAddress
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (op_Addition:String) , RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Please also mark the comments that contributed to the solution of the article
Content-Key: 448009
Url: https://administrator.de/contentid/448009
Printed on: April 25, 2024 at 11:04 o'clock
4 Comments
Latest comment
Moin,
schau mal hier, das sollte dir weiterhelfen:
https://docs.microsoft.com/de-de/exchange/recipients-in-exchange-online/ ...
Viele Grüße
Toni
schau mal hier, das sollte dir weiterhelfen:
https://docs.microsoft.com/de-de/exchange/recipients-in-exchange-online/ ...
Viele Grüße
Toni
Servus,
dein Problem hier ist, dass wenn das Ergebnis des Filters nur eine einzige Adresse ergibt, du keine Collection mehr hast sondern ein Object in dieser Form:
und das besitzt nun mal keine Methode zum hinzufügen einer weiteren Adresse, verständlich.
Also mach zwingend ein Array aus der Variablen.
Den Filter demnach so schreiben:
es geht auch in dieser Form
und Zeile 41 einfacherweise noch hierdurch ersetzen
und dann mit
die Adressen neu setzen.
Oder du machst es stattdessen so ohne Zwischenspeicher (aber dann mehreren Aufrufen).
Denk aber bitte an die primäre Adresse wenn du die mit obigem Filter ausfilterst! Die wird entweder jene die als erstes in der Collection steht (wenn kein Type definiert wurde), oder jene bei der SMTP in Großbuchstaben als Typ vor der Adresse angegeben ist. Also besser zur Sicherheit noch einen Check für die Primäre (Property prüfen) einbauen.
Grüße Uwe
dein Problem hier ist, dass wenn das Ergebnis des Filters nur eine einzige Adresse ergibt, du keine Collection mehr hast sondern ein Object in dieser Form:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True SmtpProxyAddress Microsoft.Exchange.Data.ProxyAddress
Also mach zwingend ein Array aus der Variablen.
Den Filter demnach so schreiben:
[Microsoft.Exchange.Data.ProxyAddress[]]$GoodEmailAddresses = $mailbox.EmailAddresses | ? {$_.SmtpAddress -like "*Firma.com*" -or $_.SmtpAddress -like "*onmicrosoft.com*"}
$GoodEmailAddresses = @($mailbox.EmailAddresses | ? {$_.SmtpAddress -like "*Firma.com*" -or $_.SmtpAddress -like "*onmicrosoft.com*"})
$GoodEmailAddresses += $OnMicrosoftSMTPAddress
Set-Mailbox $mailbox -EmailAddresses $GoodEMailAddresses
Oder du machst es stattdessen so ohne Zwischenspeicher (aber dann mehreren Aufrufen).
$mailbox.EmailAddresses | ? {$_.SmtpAddress -notlike "*Firma.com*" -and $_.SmtpAddress -notlike "*onmicrosoft.com*"} | %{Set-Mailbox $mailbox -EMailAddresses @{Remove=$_.SmtpAddress}}
Set-Mailbox $mailbox -EmailAddresses @{Add=$OnMicrosoftSMTPAddress}
Grüße Uwe