c-webber
Goto Top

Exchange 2016 - Liste von Domains per PS-Script an Set-SendConnector übergeben

Hallo in die Runde,

ich habe ein PS-Script gebaut, das mir eine ganze Reihe von Domains, die bereits im korrekten Format in einer Datei liegen, als Parameter -AddressSpaces an Set-SendConnector übergeben soll.

Das gewünschte Format ist: -AddressSpaces "domain1.de","domain2.de","...","..."

In meiner Datei sind die Domains bereits entsprechend aufgelistet.
Alles als Einzeiler, in Anführungszeichen gepackt und durch Komma getrennt.

Um den Inhalt als Parameter zu übergeben lese ich den Inhalt der Datei in ein Array ein:
$addressSpaces = Get-Content -Path "$meineDatei"  

Anschließend übergebe ich den Inhalt des Array als Parameter:
Set-SendConnector -Identity $ConnectorName -AddressSpaces $addressSpaces

Allerdings interpretiert Set-SendConnector den Inhalt von $addressSpaces scheinbar als eine zusammenhängende Domain.
Die Argumenttransformation für den Parameter "AddressSpaces" kann nicht verarbeitet werden. Der Wert ""domain1.de","domain2.de","domain3.de"" ist keine gültige SMTP-Domäne.  

Kann mir jemand sagen, wie ich den Inhalt des Array so übergeben bekomme, dass nicht der gesamte Inhalt des Array als ein einzelner Wert übergeben wird?

Danke und beste Grüße,
Chris

Content-ID: 73819151096

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

Ausgedruckt am: 06.10.2024 um 06:10 Uhr

13676056485
Lösung 13676056485 12.07.2024 aktualisiert um 12:49:05 Uhr
Goto Top
Hi.
In meiner Datei sind die Domains bereits entsprechend aufgelistet.
Alles als Einzeiler, in Anführungszeichen gepackt und durch Komma getrennt.
Das ist leider falsch, das Ergebnis muss ein [string[]] Array mit einer Domain pro Arrayeintrag sein die Domains also nur untereinander in die Textdatei eintragen dann klappts auch sofort face-wink. Get-Content liest Dateien per Default in ein [string[]] Array ein und zwar wird für jede Zeile ein Array Eintrag erstellt, deswegen klappt's bei dir nicht, weil du alles in die erste Zeile packst.

Textdatei-Aufbau
domain1.de
domain2.de
domain3.de

Code
$ConnectorName = "MyConnector"  
$meineDatei = "D:\domains.txt"  
Set-SendConnector -Identity $ConnectorName -AddressSpaces (Get-Content -LiteralPath $meineDatei)


nur der Vollständigkeit halber. Man kann das ganze zwar auch alles mit einer einzigen Zeile in der Textdatei machen so wie du es jetzt hast, aber das ist ja ehrlich gesagt umständlicher als sie einfach untereinander zu schreiben.
Dein Textdatei-Aufbau
"domain1.de","domain2.de","domain3.de"
Code sähe dann so aus
Set-SendConnector -Identity $ConnectorName -AddressSpaces (Get-Content -LiteralPath $meineDatei -Head 1).replace('"','').split(",")  

Gruß
c-webber
c-webber 12.07.2024 um 13:24:10 Uhr
Goto Top
Hi,

besten Dank, werde ich gleich mal ausprobieren.
Was mir nur auffällt, bzw. ich nicht verstehe (bin nicht sonderlich tief im ps-scripting drin) ist, wie kommen in deinem ersten Beispiel am Ende die Kommas zwischen die einzelnen Domains?

Der Parameter soll ja folgendermaßen übergeben werden:
-AddressSpaces "domain1.de","domain2.de","..."

Würde dein Beispiel nicht den folgenden output erzeugen (ohne Kommas)?
-AddressSpaces "domain1.de" "domain2.de" "..."

Gruß, Chris
13676056485
13676056485 12.07.2024 aktualisiert um 13:35:08 Uhr
Goto Top
Zitat von @c-webber:
Was mir nur auffällt, bzw. ich nicht verstehe (bin nicht sonderlich tief im ps-scripting drin) ist, wie kommen in deinem ersten Beispiel am Ende die Kommas zwischen die einzelnen Domains?
Der Parameter soll ja folgendermaßen übergeben werden:
-AddressSpaces "domain1.de","domain2.de","..."
Im Powershell, bezeichnet das "","","",... ein Array

$array = "Hallo1","Hallo2"  
$array.GetType()
IsPublic IsSerial Name                                     BaseType                                                                                                           
-------- -------- ----                                     --------                                                                                                           
True     True     Object[]                                 System.Array 

Würde dein Beispiel nicht den folgenden output erzeugen (ohne Kommas)?
-AddressSpaces "domain1.de" "domain2.de" "..."
Nein. Powershell arbeitet objektorientiert und hier wird vom Parameter ein Array aus Strings erwartet kein einzelner zusammenhängender String

Der Parameter -AddressSpace hat ja den Typ <MultiValuedProperty> erwartet also bei mehreren Werten ein Array und keinen single string in dem die Domains aneinander gepappt sind
[-AddressSpaces <MultiValuedProperty>]

Hier liest du dich schlau
Alles, was Sie schon immer über Arrays wissen wollten
13676056485
13676056485 12.07.2024 aktualisiert um 13:48:13 Uhr
Goto Top
Des weiteren gibt es bei MultiValuedProperties die Möglichkeit einzelne Elemente mittels Hashtable-Objekt hinzuzufügen oder zu löschen:
# zusätzliche Domain zum Connector hinzufügen
Set-SendConnector $ConnectorName -AddressSpaces @{add="otherdomain.de"}  
# Domain aus dem Connector löschen
Set-SendConnector $ConnectorName -AddressSpaces @{remove="otherdomain.de"}  
# oder beides gleichzeitig (hinzufügen und löschen) geht auch
Set-SendConnector $ConnectorName -AddressSpaces @{add="domain.tld";remove="otherdomain.de"}  
Hier nachzulesen
Ändern von mehrwertigen Eigenschaften
c-webber
c-webber 12.07.2024 um 13:58:24 Uhr
Goto Top
Danke für die gute Erklärung!
c-webber
c-webber 15.07.2024 um 09:18:27 Uhr
Goto Top
Hat super funktioniert, besten Dank für die Hilfe und einen guten Start in die Woche!

Gruß, Chris