newit1
Goto Top

XML Datei mit PowerShell bearbeiten

Hallo zusammen,

ich brauche eure Hilfe, da ich an einer Stelle nicht mehr weiterkomme.
Ich möchte mittels PowerShell Skript eine XML-Datei erstellen und dort an einer bestimmten Stelle den jeweiligen Benutzernamen einfügen. Dieser ist über $userName dem Skript bekannt.

Aussehen soll die XML später so:

<xml xmlns:o="urn:schemas-microsoft-com:office:office">  
 <o:MainFile HRef="../My_MailSignatur_USERNAME.htm"/>  
 <o:File HRef="themedata.thmx"/>  
 <o:File HRef="colorschememapping.xml"/>  
 <o:File HRef="image001.png"/>  
 <o:File HRef="filelist.xml"/>  
</xml>


Der einzufügende Username ist dem PowerShell Skript via Variable $userName bekannt.
Wenn ich das Skript laufen lasse, wird die Variable allerdings nicht eingefügt.

Angedacht war das so:

#Create XML File
New-Item -Path "C:\Temp\1.xml" -ItemType File  
Set-Content C:\Temp\1.xml '<xml xmlns:o="urn:schemas-microsoft-com:office:office">  
 <o:MainFile HRef="../My_MailSignatur_$userName.htm"/>  
 <o:File HRef="themedata.thmx"/>  
 <o:File HRef="colorschememapping.xml"/>  
 <o:File HRef="image001.png"/>  
 <o:File HRef="filelist.xml"/>  
</xml>'  

Wie kann ich das Problem lösen?

Content-Key: 7218620161

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

Printed on: April 27, 2024 at 07:04 o'clock

Member: colinardo
Solution colinardo Jan 22, 2024 updated at 12:35:24 (UTC)
Goto Top
Servus @newit1.
Variablen werden innerhalb von Hochkommas nicht expandiert nur zwischen normalen Anführungszeichen. Hier kannst du praktischerweise einen sogenannten Here-String verwenden dann musst du die bereits vorhandenen normalen Anführungszeichen nicht escapen.
$userName = $env:USERNAME
Set-Content -LiteralPath 'C:\Temp\1.xml' -Value @"  
<xml xmlns:o="urn:schemas-microsoft-com:office:office">    
 <o:MainFile HRef="../My_MailSignatur_$userName.htm"/>    
 <o:File HRef="themedata.thmx"/>    
 <o:File HRef="colorschememapping.xml"/>    
 <o:File HRef="image001.png"/>    
 <o:File HRef="filelist.xml"/>    
</xml>
"@  
Variable expansion in strings and here-strings

Grüße Uwe

p.s. eine vollständige XML Datei sollte sofern es nicht nur ein Fragment ist im Bestfall immer eine XML-Declaration im Header besitzen die bspw. so aussieht
<?xml version="1.0" encoding="utf-8"?> 
Das nur so nebenbei als Anmerkung.
Member: erikro
erikro Jan 22, 2024 at 13:09:06 (UTC)
Goto Top
Moin,

ich würde ja immer die XML-Funktionen der PS nutzen. Hier eine recht gute Einführung:
https://www.langlitz-it.de/?p=1297

hth

Erik
Member: colinardo
colinardo Jan 22, 2024 updated at 13:15:36 (UTC)
Goto Top
Zitat von @erikro:
ich würde ja immer die XML-Funktionen der PS nutzen. Hier eine recht gute Einführung:
https://www.langlitz-it.de/?p=1297
Hi Erik. Bin ich vollkommen bei dir, für den TO vermutlich hier etwas overkill wenn er die Datei rein nur erstellen und nichts an einer bestehenden XML ändern muss. Im Sinne der finalen Syntax-Gültigkeit ist das objektorientierte Anlegen aber natürlich immer die bessere Wahl.

Grüße Uwe