none
Récuprer des caractres entre deux balises avec powershell RRS feed

  • Discussion générale

  • Bonjour à tous

    j'essaye de récupérer dans un fichier TXT, tous les noms (.....) qui  sont entre <Groupe> et </Groupe>

    <Groupe>........</Groupe> 

    <Groupe>........</Groupe>

    <Groupe>........</Groupe>

    <Groupe>........</Groupe>

    <Groupe>........</Groupe>

    J'ai essayé d'utiliser cette commande après avoir importer un fichier XML en TXT 

    Select-String -Path "C:\temp\test.txt" -Pattern "<Groupe>" -Context 0

    Mais ça m'a renvoyé :

    temp\test.txt:10:                <Groupe>........</Groupe>

    Et moi je veux récupérer que le nom (.....) qui est entre les deux balises 

    Merci pour votre aide

    mardi 17 janvier 2017 21:41

Toutes les réponses

  • Bonjour,

    $doc = [xml]@'
    <xml>
        <Groupe>........</Groupe> 
        <Groupe>........</Groupe>
        <Groupe>........</Groupe>
        <Groupe>........</Groupe>
        <Groupe>........</Groupe>
    </xml>
    '@
    
    $doc.xml.Groupe


    Claude Couderc Consultant IIS, SharePoint, Exchange http://coudr.com

    mercredi 18 janvier 2017 09:55
  • Bonjour et Merci Claude de votre repense

    excuser moi de mon ignorance, car je suis débutant sur powershell

    j’ai essayé d’appliquer votre scripte dans mon environnement, on attaquant directement un fichier XML mais j’ai l’impression qu’il me manque quelque chose:

    $ParameterFile = “C:\Users\Desktop\13,01 # MA\nk.xml”

    param([String]$ParameterFile)

    $xml = New-Object XML

    $xml.Load($ParameterFile)

    $xml.Groupe.Groupe

    j’essaye de récupéré tous les noms (….) des groupes qui sont entre les deux balise

    <groups>

    <group>.....</group>

    </groups>

    dans tous le fichier XML

    Merci pour votre aide

    bien cordialement,

    mercredi 18 janvier 2017 13:57
  • La syntaxe dépend de la structure de votre fichier.

    Dans votre dernier exemple, la syntaxe est :

    $xml.groups.group


    La syntaxe suit exactement l'organisation de votre fichier.

    Si votre fichier XML, stocké dans $xml, a le contenu :

    <fruits>
        <rouges>
           <baies>Myrtilles</baies>
        </rouges>
    </fruits>

    la syntaxe est :

    $xml.fruits.rouges.baies

    ce qui donne

    Myrtilles


    Claude Couderc Consultant IIS, SharePoint, Exchange http://coudr.com

    mercredi 18 janvier 2017 14:05
  • Dans ton cas, tapes:

    [xmc]$xml = Get-Content -path “C:\Users\Desktop\13,01 # MA\nk.xml”
    
    $xml.groups.group

    B.

    mercredi 18 janvier 2017 15:03
  • Salut a tous

    Merci beaucoup a toi Claude et Bawilanemo

    ça marche bien waw c'est super

    [xml]$xml = Get-Content -path C:\Users\Desktop\13,01 # MA\nk.xml”

    $xml.LIENS.lot.PREREQ.GROUPES.Groupe

    je partage un autre code, que j'ai pu récupérer et compléter qui fais la même chose

    for ($i=0;$i -lt  $( $xml.LIENS.lot.count);$i++){$xml.LIENS.lot[$i].PREREQ.GROUPES.Groupe}

    Merci encore
    jeudi 19 janvier 2017 19:27
  • je suis encore désoler j'ai hante, j'ai encore besoin de vous, j'essaye de faire mon max mais l'expiatrice me trahie 

    J'essaye de comparer c'est groupes qui sont présent dans XML avec d'autre groupe qui sont dans une OU dans AD

    j'ai essayer ce code la mais sa ne fonctionne pas

    $group = Get-ADGroup -Filter * -SearchBase "OU=....,DC=....,DC=.....,DC=...." -Properties * | select name

    [xml]$xml = Get-Content -path “C:\Users\Desktop\13,01 # MA\nk.xml

    $gro = $xml.LIENS.lot.PREREQ.GROUPES.Groupe

    foreach ($gro in $group)
    {
    Compare-Object $gro $group

    (et récupéré tous les groupes qui sont dans les deux (XML et OU) et les exporter dans un fichier TXT ou CSV

    }

    Merci encore pour votre aide

    jeudi 19 janvier 2017 19:28
  • Plusieurs choses

    Pour comparer de manière efficace, c'est bien d'avoir deux objets ayants les même propriétés.

    Donc, pour alimenter $group, fais comme ceci

    $group = Get-ADGroup -Filter * -SearchBase "OU=....,DC=....,DC=.....,DC=...." -Properties * | select -expandproperty name 

    tu peux comparer la différence avec la commande

     $group | gm

    ensuite, tu créés une variable $gro, que tu veux ensuite utiliser dans un foreach, cela ne peux pas fonctionner.
    Si vraiment tu devais faire un foreach (et ce n'est pas le cas ici), tu devrais utiliser une nouvelle variable que foreach alimenterait a chaque boucle.

    en résumé, cela ressemblerait à ceci:

    $group = Get-ADGroup -Filter * -SearchBase "OU=....,DC=....,DC=.....,DC=...." -Properties * | select -expandproperty name
    [xml]$xml = Get-Content -path “C:\Users\Desktop\13,01 # MA\nk.xml”
    $gro = $xml.LIENS.lot.PREREQ.GROUPES.Groupe
    Compare-Object $gro $group
    

    Ce qui te sortira la lise de comparaison complète à l'écran.

    Pour avoir les groupes présents dans les deux listes:

    Compare-Object $gro $group -ExcludeDifferent -IncludeEqual

    Pour un export dans un fichier txt:

    Compare-Object $gro $group -ExcludeDifferent -IncludeEqual  | select -ExpandProperty InputObject | Out-File -FilePath .\results.txt -Encoding utf8

    B.

    jeudi 19 janvier 2017 20:42
  • Bonjour Bawilanemo

    merci pour ton retour Rapide malheureusement je ne peux pas tester aujourd’hui car je n'ai pas la main sur mon poste je testerai jeudi et je te tien au courent

    mille merci encore

    et bon Weekend

    vendredi 20 janvier 2017 19:06
  • Bonjour Bawilanemo

    je ne sais pas comment te remercier 

    ça marche bien surtout avec la commande

    Compare-Object $gro $group -ExcludeDifferent -IncludeEqual

    qui facilite vraiment le travail, maintenant la création et mette en relation les deux procureuses et terminer

    il me reste le plus gros morceau c'est de vérifier que c'est groupes ont ou pas une relation avec une collection et application dans SCCM

    je ne sais pas si vous avais les compétences pour ce la, mais en tout cas

    Mille merci

    jeudi 26 janvier 2017 18:44