Alright, outra lição rápida em encontrar XML.

Você vê, um nó XML como este:

<server name="DomainController1"></server>

Usa o nome como um atributo. Eu acabei de escrever um post sobre como procurar XML por atributo de nó.

Mas isso não lhe fará bem nenhum contra o valor real do texto do nó.

<server>DomainController1</server>

Besta totalmente diferente. O truque aqui é usar o método “text()”.

$XML | Select-Xml -Xpath '//server'

Oh sim… Esse é o bom material.

Você também pode pesquisar alguns níveis abaixo. Aqui está um exemplo de um arquivo Remote Desktop Connection Manager.

<group> <properties> <expanded>True</expanded> <name>DomainControllers</name> </properties> <logonCredentials inherit="None"> <profileName scope="File">myDomain\myAccount</profileName> </logonCredentials> <server> <properties> <name>DomainController1.myDomain.demo</name> </properties> </server></group>

Se eu quiser obter o nó do GRUPO que tem o SERVIDOR chamado DomainController1.myDomain.demo nele… Eu posso fazer isso com XPath e Select-XML.

#This isn't exactly it, but it's a learning step to help you better understand.$xml | Select-XML -XPath '//group/server/properties/name'

Esta é a forma de obter o nó de nome do servidor que está no grupo. Veja o quão próximo isso está? Você não está aprendendo?

Em inglês, essa declaração XPath traduz para “Give me the NAME node that has the text value of DomainController1.MyDomain.demo, que é o filho de um nó chamado propriedades, que é filho de um chamado servidor, que é filho de um nó chamado grupo. E, esse nó de grupo pode estar em qualquer lugar no XML”

Definimos fora dos parênteses o nó que queremos receber. Definimos dentro dos colchetes as avaliações para chegar lá.

Desde que eu quero o nó GRUPO, vou colocar tudo o resto dentro dos colchetes.

$xml | Select-XML -XPath '//group'

Agora isso retorna o nó de grupo. Você está pronto para clonar o nó, atualizar atributos ou inserir um nó filho e então salvar o objeto XML atualizado de volta para o arquivo XML original.

Deixe uma resposta

O seu endereço de email não será publicado.