2015-05-12 5 views
1

В файле web.config мне нужно включить атрибуты httpGetEnabled и httpsGetEnabled, если они не существуют.Как добавить атрибут, если он не существует с помощью 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 командлеты из, но это намного проще (и рекомендуется), чтобы просто держать 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

Спасибо, я не был уверен, что это была причуда powershell или нет. – StingyJack

Смежные вопросы