Come aggiungere-attributo, se non esiste, utilizzando PowerShell?

Nel web.file di configurazione devo abilitare httpGetEnabled e httpsGetEnabled attributi, se essi non esistono.

$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
    }

Sono in grado di impostare e ottenere i valori degli attributi utilizzando PowerShell, ma non so come aggiungere un nuovo attributo tramite PowerShell. Ci isno aiutare a disposizione utilizzando Get-help per l’aggiunta di attributi. Come aggiungere un nuovo attributo utilizzando PowerShell?

InformationsquelleAutor Samselvaprabu | 2015-05-12



2 Replies
  1. 7

    Non so dove stai ricevendo queste XML cmdlet, ma è molto più facile (e consigliato) solo per mantenere la XmlDocument in memoria,

    $xml = [xml] (Get-Content $Path)
    $node = $xml.SelectSingleNode($XPath)
    ...

    Inoltre, non è necessario utilizzare XPath per semplici percorsi. Elementi dell’albero può essere letta come oggetti.

    $httpGetEnabled = $xml.serviceMetadata.httpGetEnabled

    Comunque, per aggiungere l’attributo:

    function Add-XMLAttribute([System.Xml.XmlNode] $Node, $Name, $Value)
    {
      $attrib = $Node.OwnerDocument.CreateAttribute($Name)
      $attrib.Value = $Value
      $node.Attributes.Append($attrib)
    }

    Per salvare di nuovo il file, utilizzare $xml.Save($Path)

    • Qualche idea del perché il nodo deve avere l’attributo aggiunto e anche impostare?
    • A cura di chiarimento. Il SetAttribute era solo per impostare il valore dell’attributo. E ‘più chiaro ora che ho usato $attrib.Value = $Value prima di “Append”.
    • Grazie, non ero sicuro se era un powershell vezzo o non.
  2. 1

    Su PowerShellCore 6.2 sono in grado di aggiungere un attributo come questo.

    Dovrebbe funzionare su qualsiasi PowerShell versione.

    [xml]$xml = gc my.xml
    $xml.element1.element2["element3"].SetAttribute("name", "value")

    Questo funziona perché mentre si utilizza il wrapper proprietà XmlElement restituisce avvolto valori, Utilizzando l’operatore di indicizzazione restituisce un puro oggetto Xml. Nativo “SetAttribute” creerà uno, se non esiste.

Lascia un commento