我正在尝试使用登录用户的ID在XML文件中编辑属性值
我尝试过:
$user = $env:USERNAME
$xml = [xml](Get-Content "D:\Python\prm.xml")
$node = $xml.BootStrap.DataBaseAliases.LastLoginUserName
$node.SetAttribute("LastLoginUserName", "$user");
它返回一个错误: 您不能在空值表达式上调用方法。 在D:\ Python \ a.ps1:5 char:1 + $ node.SetAttribute(“ LastLoginUserName”,“ $ user”); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull
还尝试了以下操作:
$user = $env:USERNAME
$FileLocation = "D:\Python\prm.xml"
$File = Get-Content $FileLocation
$XML = [XML]$File
$XPpath = "/BootStrap/DataBaseAliases/LastLoginUserName"
$node = $XML.SelectNodes($XPpath)
$node | % { $_.SetAttribute("attribute-1", "$user") }
$XML.OuterXml | Out-File $FileLocation
这不会返回任何错误,但是xml不变。 下面的XML内容:
<?xml version="1.0" encoding="utf-8"?><BootStrap MajorVersion="18"
MinorVersion="8" PatchVersion="5" DeploymentVersion="0"><DataBaseAliases
DefaultPMAlias="Corp_2016" LastLoginUserName="FOOUSER"><Alias>
<Name>PMDB</Name><AppType>Project Management</AppType><Connection>
<DriverName>SQLServer</DriverName><BlobSize>-
我想用当前登录的用户替换FOOUSER。
答案 0 :(得分:1)
XPath没有指向适当的元素,因此结果是一个空集。让我们看看为什么。
/BootStrap/DataBaseAliases/LastLoginUserName
会匹配XML,
<BootStrap>
<DatabaseAliases>
<LastLoginUserName />
</DatabaseAliases>
</BootStrap>
这不是示例中的内容。 LastLoginUserName
是DatabaseAliases
的属性。更改XPath使其指向DataBaseAliases元素并设置其属性,如下所示:
$XPpath = "/BootStrap/DataBaseAliases"
$node = $XML.SelectNodes($XPpath)
$node | % { $_.SetAttribute("LastLoginUserName", $user) }
$XML.InnerXML