所以我有一个.exe.config文件,我试图搜索其中的特定属性,然后在Windows 7中使用Powershell 4.0版进行编辑,我遇到了问题。我尝试了几件事,但没有取得任何成功。这是我正在使用的配置文件的精简版本。
<configuration>
<Config1>
<section name="text" type="text, text, text=text" allowLocation="true" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" requirePermission="true" />
</Config1>
<Config2>
<module debugLogLevel="Debug" Version="1.0.0.0" />
<Interested-Item attribute-1="text-text" attribute2="0">
</Interested-Item>
<modules>
<add name="something1" />
<add name="something2" />
<add name="something3" />
<add name="something4" />
<add name="something5" />
<add name="something6" />
<add name="something7" />
</modules>
</Config2>
</configuration>
如何使用Powershell在Interested-Item下更改属性-1?任何帮助将不胜感激。
以下是我尝试失败的一些例子。
$File = Get-Content $FileLocation
$XML = [XML]$File
foreach ($attribute in $XML.Config2.Interested-Item)
{
$attribute = Interested-Item.attribute-1 = "Updated Texted"
}
XML.Save($FileLocation)
这对我没什么用。它根本不编辑文件。
$File = Get-Content $FileLocation
$node = $File.SelectSingleNode("/Config2/Interetested-Item[@attribute-1]")
$node.Value = "New-Value"
$File.Save($FileLocation)
这将返回以下错误。
The property 'Value' cannot be found on this object. Verify that the property exists and can be set.At line:5 char:1
+ $node.Value = "New-Value"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
我尝试使用Get-Help Select-XML中的-Xpath实现它,并且也没有成功。
我唯一获得成功的东西,在实践中不起作用如下。
(Get-Content $FileLocation) | ForEach-Object{$_ -replace "text-*", "NewText"} | Set-Content $FileLocation
这将首次强制工作,然后由于设置新值而无法更新参数。我的目的是多次运行此脚本以更新一组配置文件。
答案 0 :(得分:4)
有很多方法。例如,您可以使用XPath:
$File = Get-Content $FileLocation
$XML = [XML]$File
$XPpath = "/configuration/Config2/Interested-Item[@attribute-1]"
# Selecting all nodes that match our $XPath (i.e. all
# '/configuration/Config2/Interested-Item' nodes that have attribute
# 'attribute-1'.
$nodes = $XML.SelectNodes($XPpath)
# Updating the attribute value for all selected nodes.
$nodes | % { $_.SetAttribute("attribute-1", "foo") }
$XML.OuterXml | Out-File $FileLocation
更多信息here,当你处理HTML或XML时,w3schools.com通常是你的朋友。