Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add-attribute if it doesn't exist using PowerShell?

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?

like image 766
Samselvaprabu Avatar asked May 12 '15 11:05

Samselvaprabu


1 Answers

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)

like image 85
makhdumi Avatar answered Oct 03 '22 06:10

makhdumi