PowerShell脚本保存XML文件时提示路径格式不支持的问题求助
PowerShell脚本保存XML文件时提示路径格式不支持的问题求助
我有一个XML文件内容如下:
<?xml version="1.0" encoding="utf-8"?> <Topology> <SERVER1 desc="name of server1"></ICONIS_ONLINE_SERVER1> <SERVER2 desc="name of server2">PROJECT</SSCOFFLINE_SERVER1> </Topology>
我写了一段PowerShell脚本,用来读取、修改并保存这个XML文件:
#This will replace the values on the topology file and saves it $xmldata =[XML](Get-Content \\10.10.115.16\c$\Deployment\Config.xml) $xmldata. Topology.SERVER1.InnerText = 'Mydomain' $xmldata.Save((Resolve-Path \\10.10.115.16\c$\Deployment\Config.xml).Path
这段脚本可以完成修改操作,但保存的时候报错了,错误信息是:
Exception calling "Save" with "1" argument(s): "The given path's format is not supported."
有没有大佬能帮忙解决这个问题呀?
解决方案
出现这个错误主要有几个可能的原因,咱们逐个排查解决:
修复脚本语法错误
你的脚本有两处明显的语法问题:$xmldata. Topology里多了一个空格,应该写成$xmldata.Topology,否则PowerShell无法正确识别Topology属性;- 最后一行
Save方法的括号没有配对,(Resolve-Path ...).Path前面的左括号缺少对应的右括号。
修正后的脚本片段:
$xmldata.Topology.SERVER1.InnerText = 'Mydomain' $xmldata.Save((Resolve-Path \\10.10.115.16\c$\Deployment\Config.xml).Path)解决UNC路径兼容性问题
.NET的XmlDocument.Save()方法对UNC路径的支持有时候会有异常,你可以换一种方式获取文件路径,比如用Get-Item获取文件对象后传递FullName属性:$xmlPath = "\\10.10.115.16\c$\Deployment\Config.xml" $xmldata = [XML](Get-Content $xmlPath) $xmldata.Topology.SERVER1.InnerText = 'Mydomain' # 通过Get-Item获取标准的完整路径 $fileInfo = Get-Item $xmlPath $xmldata.Save($fileInfo.FullName)要是还是不行,还可以先把XML文件复制到本地临时目录,修改后再复制回远程路径,彻底避开UNC路径的问题:
$remotePath = "\\10.10.115.16\c$\Deployment\Config.xml" $localTempPath = "$env:TEMP\Config.xml" # 复制远程文件到本地临时目录 Copy-Item $remotePath $localTempPath # 读取并修改本地文件 $xmldata = [XML](Get-Content $localTempPath) $xmldata.Topology.SERVER1.InnerText = 'Mydomain' $xmldata.Save($localTempPath) # 把修改后的文件复制回远程路径 Copy-Item $localTempPath $remotePath -Force检查权限问题
别忘了确认运行脚本的账号有没有对\\10.10.115.16\c$\Deployment目录的读写权限,如果权限不足,也可能触发类似的路径格式错误提示,可以先手动尝试在该目录下创建或修改文件验证权限。
备注:内容来源于stack exchange,提问作者Mohan Reddy
相关产品推荐
相关产品推荐

