如何使用返回值* .exe替换不完全是XML的文件内的XML?

时间:2015-02-02 19:14:44

标签: xml powershell scripting

我有一个特殊格式的配置文本文件,其中有1行以wcfconfig,Text,<?xml version...开头,我正在尝试使用PowerShell将整个XML块替换为从可执行文件返回的XML块。文本文件(例如:C:\ Temp \ MyText.txt)如下所示:

Special Export File
Format: 1
Configuration: MyConfig
    startupcmd,Text,
    extracmdline,Text,
    wsdlport,Text,9500
    useserverprinters,Int,1
    aosencryption,Text,1
    dbserver,Text,Dev-SERVER
    wcfconfig,Text,<?xml version="1.0" encoding="utf-8"?><configuration>...
    hint,Text,

使用服务器/端口调用时,我有一个可执行文件,并返回一个XML字符串。

C:\MyFile.exe Dev-SERVER 9500

Dev-Server来自文本文件中的dbserver,而9500来自文本文件中的wsdlport

它返回一个格式为上面wcfconfig的XML字符串,我只想在1行完全替换:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
    </configSections>
    <client>
    </client>
</configuration>

1 个答案:

答案 0 :(得分:0)

由于我没有你的环境,我不得不假装一些东西。 C:\MyFile.exe Dev-SERVER 9500的输出由here-string $return

表示
$return = @"
<?xml version="1.1" encoding="utf-8"?>
<configuration>
    <configSections>
    </configSections>
    <client>
    </client>
</configuration>
"@

(Get-Content "C:\Temp\MyText.txt") -replace '^(\s*?wcfconfig,Text,).*',"`$1$($replace -replace "`r`n")"

获取文件内容&#34; C:\ Temp \ MyText.txt&#34;并使用-replace找到您要更新的行。将其替换为<?xml之前的所有文本,然后在删除新行的情况下附加文件数据。

某些元素> <之间会有空格。如果这是一个问题,则额外的-replace应该处理这个问题。 -replace "\>\s+?\<","><"