Powershell Variable in Datei finden und ersetzen
Hallo;
ich will mal wieder was schickes machen aber mir fehlt ein wenig der Ansatz.
Ich habe eine Datei "Templete.txt":
Die [/ / und / /] Zeichen Markieren die den Anfang und Ende der Variablen. Kann noch angepasst werden.
Jetzt will ich
- alle Variablen finden
- auslesen
- den Kompletten String ersetzen.
- Datei unter neuem Namen Speichern
Dann soll also so ein Datei heraus kommen z.B.
Dateiname Franz Müller.txt
Das Powershel Script Soll in Etwa So aussehen:
Ich wäre dankbar für eine Denkanstoß.
Gruß SPSman
ich will mal wieder was schickes machen aber mir fehlt ein wenig der Ansatz.
Ich habe eine Datei "Templete.txt":
[bla ]
Name: [//Name//]
Anrede Herr [//Name//]
Telefon [//Nummer//] [blub]
Die [/ / und / /] Zeichen Markieren die den Anfang und Ende der Variablen. Kann noch angepasst werden.
Jetzt will ich
- alle Variablen finden
- auslesen
- den Kompletten String ersetzen.
- Datei unter neuem Namen Speichern
Dann soll also so ein Datei heraus kommen z.B.
Dateiname Franz Müller.txt
[bla ]
Name: Franz Müller
Anrede Herr Franz Müller
Telefon 0123456789 [blub]
Das Powershel Script Soll in Etwa So aussehen:
$users = Get-ADUser -Filter {MemberOf -contains ScriptUser}
$Datei = Get-Content ("C:\temp\Templete.txt")
#Funktion um alle Variablen Namen in $Datei zu finden
#????? >> $ReplaceArray
foreach ($user in $users)
{
foreach ($Variable in $ReplaceArray)
{
$OldString = "[//"+$Variable+"//]"
$NewString = Get-ADUser -Filter {name -eq $User} -Properties $Variable #geht das so?
$Datei -Replace($OldString,$NewString)
}
$Dateiname= Get-ADUser -Filter {name -eq $User} -Properties sn
Set-Content -Path "C:\temp\"+$Dateiname+".TXT" $Datei
}
Ich wäre dankbar für eine Denkanstoß.
Gruß SPSman
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1471928700
Url: https://administrator.de/contentid/1471928700
Ausgedruckt am: 19.11.2024 um 01:11 Uhr
9 Kommentare
Neuester Kommentar
$template = 'C:\temp\template.txt'
$content = Get-Content $template -raw
foreach($user in (Get-ADUser -Filter * -Properties *)){
[regex]::replace($content,'(?is)\[//([^/]+)//\]',{
param($m)
$user.($m.Groups[1].Value)
}) | Set-Content "C:\temp\$($user.DisplayName).txt"
}
Ich habe eine Datei "Templete.txt":
Du bist mir auch so eine "Trompete" min jung . Freidaach ....https://de.wikipedia.org/wiki/Template
Moin,
Dachte ich es mir doch. Welcher Mailserver? Die meisten haben dafür eine eingebaute Funktion. Hier z. B. Exchange:
https://docs.microsoft.com/de-de/microsoft-365/admin/setup/create-signat ...
hth
Erik
Zitat von @SPSman:
Es geht darum Standardisierte Email-Signaturen per Logon Script zu verteilen. Vorher müssen die Dateien natürlich mit dem jeweilig Informationen aus dem AD gefüllt werden.
Es geht darum Standardisierte Email-Signaturen per Logon Script zu verteilen. Vorher müssen die Dateien natürlich mit dem jeweilig Informationen aus dem AD gefüllt werden.
Dachte ich es mir doch. Welcher Mailserver? Die meisten haben dafür eine eingebaute Funktion. Hier z. B. Exchange:
https://docs.microsoft.com/de-de/microsoft-365/admin/setup/create-signat ...
hth
Erik
Moin,
Sollte man ja auch nicht. Stell Dir mal einen Email-Verkehr vor, bei dem zehnmal hin- und hergemailt wird. Und jedesmal schmieren beide ihre zehn Zeilen Signatur drunter. Das sind dann am Ende 200 Zeilen überflüssiger Datenmüll.
Aus dem Handbuch "Wie komme ich auf die Blacklists?": Fügen Sie möglichst viele Grafiken in Ihre Mails ein. Der Empfänger sieht wirklich gerne die broken images. Außerdem klickt er auch immer wieder gerne die Warnmeldungen weg, dass da irgenwelche gefährlichen Bilder nachgeladen werden sollen. Und, das wollen wir ja schließlich, es erhöht den SPAM-Index ungemein.
Liebe Grüße
Erik
Zitat von @SPSman:
Leider 2 Probleme die ich umgehen will:
Leider 2 Probleme die ich umgehen will:
Einschränkungen von organisationsweiten Signaturen
Folgendes können Sie nicht tun, wenn Sie E-Mail-Signaturen in Microsoft 365 verwalten:
Folgendes können Sie nicht tun, wenn Sie E-Mail-Signaturen in Microsoft 365 verwalten:
Die Signatur direkt unter der letzten E-Mail-Antwort oder -Weiterleitung einfügen
Sollte man ja auch nicht. Stell Dir mal einen Email-Verkehr vor, bei dem zehnmal hin- und hergemailt wird. Und jedesmal schmieren beide ihre zehn Zeilen Signatur drunter. Das sind dann am Ende 200 Zeilen überflüssiger Datenmüll.
Bildern in E-Mail-Signaturen einbetten
Aus dem Handbuch "Wie komme ich auf die Blacklists?": Fügen Sie möglichst viele Grafiken in Ihre Mails ein. Der Empfänger sieht wirklich gerne die broken images. Außerdem klickt er auch immer wieder gerne die Warnmeldungen weg, dass da irgenwelche gefährlichen Bilder nachgeladen werden sollen. Und, das wollen wir ja schließlich, es erhöht den SPAM-Index ungemein.
Liebe Grüße
Erik
Zitat von @SPSman:
Mag du mir ein kurze Erklärung bieten? Ich versteh bei deinem Beispiel fast nur Bahnhof :O
Dann hättest du wohl besser Lockführer werden sollen Mag du mir ein kurze Erklärung bieten? Ich versteh bei deinem Beispiel fast nur Bahnhof :O
# Pfad zum Template
$template = 'C:\temp\template.txt'
# Inhalt des Templates auslesen
$content = Get-Content $template -raw
# für jeden AD-User
foreach($user in (Get-ADUser -Filter * -Properties *)){
# suche via Regex-Replace-Iterator Funktion nach deinen Platzhaltern inkl. Submatch für den Namen (https:{{comment_single_line_double_slash:0}}
[regex]::replace($content,'(?is)\[//([^/]+)//\]',{
param($m)
ersetze den Platzhalt mit dem Inhalt des AD-User-Attributs mit dem selben Namen
$user.($m.Groups[1].Value)
# und schreibe das Template in eine Textdatei mit dem SamAccountname des Users
}) | Set-Content "C:\temp\$($user.SamAccountName).txt"
}
Zitat von @SPSman:
Entschuldige, da habe ich mich mal wider nicht genau genug ausgedrückt...
Es geht um die Obigen Code Zeilen
Und genau die habe ich dir oben kommentiert!Entschuldige, da habe ich mich mal wider nicht genau genug ausgedrückt...
Es geht um die Obigen Code Zeilen
[regex] ist der verweis auf Regular Expressions und wird mit :: an die Replace funktion übergeben,Richtig?
Nein, Replace ist eine statische Funktion der System.Text.RegularExpressions.Regex Klasse.Allerdings was bedeutet:
(?is) \[/ / ([^/]+) / /\]???
Das ist Regular-Expression-Syntax: Regular Expressions Tutorial(?is) \[/ / ([^/]+) / /\]???
\ heißt jetzt komm eine Zeichen das nicht als regex interpretiert werden sollenn.
Das ist das Escape-Zeichen das ein in Regex besonders interpretiertes Zeichen als Literal deklariert damit es nicht mehr besonders ist.Param initialisiert einen Parameterdatensatz, aber woher kommt das $m ?
Nein, das ist die Deklaration der Iterator-Parameter genau wie bei einer normalen Funktion. Der Funktion wird für jeden Match des Regex dieser über den Parameter $m als RegularExpressionMatch übergeben.Vermutlich sind dort die AD-Eigenschaftsnamen gespeichert oder?
Nein.Und mit $User.($m.Groups[1].Value) werde die User-Eigenschaftswerte aus dem Parameterdatensatz gelesen und als Liste an Replace übergeben richtig?
Nein $user enthält die AD Eigenschaften des Users, und mit dem Klammmernaufruf dahinter wird der Submatch in der Regular-Expression (der der dort in den Klammern steht) ausgelesen (also der reine Name innerhalb der NameDer Name der darin steht sollte also zu einer AD-Eigenschaft des Users passen!
Was macht das Groups[1]?
Erstellt es einen Index über die AD-Eigenschaftsnamen?
Nein damit wird der erste Submatch in den runden Klammern im Regex ausgelesen.Erstellt es einen Index über die AD-Eigenschaftsnamen?