Powershell从xml文件获取路径值

时间:2018-11-02 19:24:43

标签: powershell

我是powershell的初学者,无法读取xml文件的路径值。

Settings.xml

<?xml version="1.0"?>
 <Configuration>
   <EmailSettings>
    <SMTPServer>blabla</SMTPServer>
    <SMTPPort>blabla</SMTPPort>
    <Path>Repository\Excel</Path>   
  </EmailSettings>
 </Configuration>

我要通过这种方式读取XML文件中的数据

$ScriptPath = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent

[xml]$ConfigFile = Get-Content "$ScriptPath\Settings.xml"

问题是,如果我显示提取的值,它会正确显示,而如果我将其与另一个值连接起来(例如,获取完整路径),则会得到此

Write-Host $ScriptPath  
--> c:\script

write-host $ConfigFile.Configuration.EmailSettings.Path 
--> Repository\Excel

write-host $ScriptPath\$ConfigFile.Configuration.EmailSettings.Path   
--> c:\script\System.Xml.XmlDocument.Configuration.EmailSettings.Path

我们如何获取值(以字符串格式??)以能够与其他变量连接?

谢谢

1 个答案:

答案 0 :(得分:1)

您需要$(...)(子表达式运算符),以便在可扩展字符串内评估诸如<{1}}之类的表达式 < / em>。
相比之下,没有$ConfigFile.Configuration.EmailSettings.Path简单变量引用(例如$ScriptPath)就可以了:

$(...)

请注意,我还添加了显式双引号,以使命令更健壮-有关详细信息,请参见下文。

顺便说一句:Write-Host is generally the wrong tool to use,除非意图是明确地仅写入显示内容,而绕过PowerShell的输出流。


通常,不是单个表达式的 未加引号标记被隐式视为可扩展字符串,即,就像它们已传入一样双引号,大体the same rules apply

但是,在没有显式引号的情况下,存在其他陷阱,例如以Write-Host "$ScriptPath\$($ConfigFile.Configuration.EmailSettings.Path)" 开头的令牌或需要转义其他字符,因此 始终双引号可扩展令牌是形成的好习惯。

PowerShell如何通常在参数模式下解析未加引号的令牌是一个复杂的话题-请参见this answer