Reputation: 18197
In the web.config file I have to enable httpGetEnabled
and httpsGetEnabled
attributes if they don`t exist.
$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
}
I am able to set and get attribute values using PowerShell but I don't know how to add a new attribute using PowerShell. There isno help available using Get-help
for adding attributes. How to add a new attribute using PowerShell?
Upvotes: 5
Views: 26072
Reputation: 1710
On PowerShellCore 6.2 I am able to add attribute like this.
Should work on any PowerShell version.
[xml]$xml = gc my.xml
$xml.element1.element2["element3"].SetAttribute("name", "value")
This works because while using the wrapper properties on XmlElement returns wrapped values, Using the indexing operator returns a pure Xml object. The native "SetAttribute" will create one if it does not exist.
Upvotes: 7
Reputation: 1308
I don't know where you're getting these XML cmdlets from, but it's much easier (and recommended) to just keep the XmlDocument in memory,
$xml = [xml] (Get-Content $Path)
$node = $xml.SelectSingleNode($XPath)
...
You also don't need to use XPath for simple paths. Elements in the tree can be accessed like objects.
$httpGetEnabled = $xml.serviceMetadata.httpGetEnabled
Anyway, to add the attribute:
function Add-XMLAttribute([System.Xml.XmlNode] $Node, $Name, $Value)
{
$attrib = $Node.OwnerDocument.CreateAttribute($Name)
$attrib.Value = $Value
$node.Attributes.Append($attrib)
}
To save the file back, use $xml.Save($Path)
Upvotes: 14