在web.config文件中,如果它们不存在,我必须启用httpGetEnabled
和httpsGetEnabled
属性。
$Path = "c:\web.config"
$XPath = "/configuration/system.serviceModel/behaviors/serviceBehaviors/behavior"
if ( Select-XML -Path $Path -Xpath $XPath ) {
"Path available"
$attributePath = $Xpath +="/serviceMetadata"
"Attribute path is $attributePath"
If (Get-XMLAttribute -Path $Path -Xpath $attributePath -attribute "httpGetEnabled" ) {
"httpGetEnabled is present"
}
ElseIf (Get-XMLAttribute -Path $Path -Xpath $attributePath -attribute "httpsGetEnabled") {
"httpsGetEnabled is present"
}
Else {
"Add both httpGetEnabled and httpsGetEnabled attribute with the value true and false accordingly"
$attributeset = @" httpGetEnabled="false" "@
New-Attribute -path $path -xpath $XPath -attributeset $attributeset
}
我可以使用PowerShell设置和获取属性值,但我不知道如何使用PowerShell 添加新属性。使用Get-help
添加属性没有任何帮助。如何使用PowerShell添加新属性?
答案 0 :(得分:6)
我不知道您从哪里获取这些XML cmdlet,但是将XmlDocument保存在内存中会更容易(并且建议),
$xml = [xml] (Get-Content $Path)
$node = $xml.SelectSingleNode($XPath)
...
您也不需要将XPath用于简单路径。可以像对象一样访问树中的元素。
$httpGetEnabled = $xml.serviceMetadata.httpGetEnabled
无论如何,要添加属性:
function Add-XMLAttribute([System.Xml.XmlNode] $Node, $Name, $Value)
{
$attrib = $Node.OwnerDocument.CreateAttribute($Name)
$attrib.Value = $Value
$node.Attributes.Append($attrib)
}
要保存文件,请使用$xml.Save($Path)
答案 1 :(得分:0)
在PowerShellCore 6.2上,我可以像这样添加属性。
可以在任何PowerShell版本上使用。
[xml]$xml = gc my.xml
$xml.element1.element2["element3"].SetAttribute("name", "value")
之所以行之有效,是因为在XmlElement上使用包装器属性返回包装的值时,使用索引运算符将返回纯Xml对象。如果本地“ SetAttribute”不存在,它将创建一个。