2015-05-12 94 views
1

在web.config文件中,如果它們不存在,我必須啓用httpGetEnabledhttpsGetEnabled屬性。如何添加屬性,如果它不存在使用PowerShell?

$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添加新屬性?

回答

2

我不知道你在哪裏得到這些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)

+0

任何想法,爲什麼節點必須有屬性附加,也可以設置? – StingyJack

+0

編輯澄清。 'SetAttribute'只是設置屬性的值。現在更清楚的是,在Append之前使用了'$ attrib.Value = $ Value'。 – makhdumi

+0

謝謝,我不確定這是否是Powerhell的怪癖。 – StingyJack

相關問題