IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

recuperation de log depuis un xml séréalisé [PowerShell]


Sujet :

Scripts/Batch

  1. #21
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fabi3n Voir le message
    Comme tu peux le voir, j'essaie de retourner dans le XML, une variable afin de pouvoir de m'éviter un cacophonie de méandre de blabalbabezkjhcibdcdfef
    Je n'ai pas compris, tu peux reformuler ?

    En passant, la substitution nécessite l'usage d'une chaîne entre double quottes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $f1='-XYZ-'
    @"
    <?xml version="1.0" encoding="UTF-8" ?>
        <prtg>
            <result>
             <channel>
               Message
             </channel>
             <value>
             '&$f1&'
             </value>
            </result>
        </prtg>
    "@
    De plus la variable $f1 est déclarée après son usage, cela ne risque pas de fonctionner, et enfin, tu sembles vouloir inclure le fichier que tu crées %-)

  2. #22
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Bonjour Laurent,

    Hier Lundi mal poilé avec ce script de merde, j'ai été un peu lourd ^^, mais après le premier épisode de Sword art online saison 2, la fin de kill la kill, et une bigbank en stealth et désir de mort sur Payday 2, c'est fou comment la bonne humeur reviens , donc je vais résumé mon problème avec un maximum de détail cte fois ^^.

    Donc sur cette XML, je dois récuperer dans la variable (ici $f1) la catégorie message "\\XML\entry\message", afin de le glissé dans une deuxième XML pour un custom sensor sur PRTG.

    Ce qu'est PRTG pour les non-connaisseur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?xml version="1.0" encoding="UTF-8" ?>
    <XML>
    	<entry>
    		<Time>
    			1403688737
    		</Time>
    		<Code>
    			9568256
    		</Code>
    		<Severity>
    			2
    		</Severity>
    		<Data>
    			<map>
    				<item>
    					<first>
    						id
    					</first>
    					<second>
    						68A9EA8C-AF71-420D-BCD2-2FED7DB24FA8
    					</second>
    				</item>
    			</map>
    		</Data>
    		<Category>
    			1
    		</Category>
    		<Message>
    			Browsing contents of avfs:/local
    		</Message>
    	</entry>
    </XML>
    Le code de retour du censeur PRTG est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     <prtg>
            <result>
             <channel>
               Channel
             </channel>
             <value>
                Value
             </value>
            </result>
        </prtg>
    Donc le channel ce nomme message et la value est $f1.

    //Si on omet la partie de sérialisation et dé-sérialisation du XML d' Acronis, grosse merde mais problème contourner //

    J'utilise donc avec ton aide infinie et dévouée pu avancé à grand pas dans l'avance de mon code.

    Le code du moment est celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $FullPathName='C:\Users\Fabi3n\Desktop\472ED1A0-95DA-4E8B-847C-E08F84A9EDE3.xml'
    $Doc=Get-Content -path $FullPathName -Encoding utf8|Out-String
    $Result=$doc -split '\s*<\?xml version="1.0" encoding="UTF-8" \?\>'
    $Datas=$result|where {$_ -ne [string]::Empty}
    [XML]$f1=set-content c:\temp\backup1.xml
    
    $f1=$f1.XML.entry.Message.Trim()
    @"
    <?xml version="1.0" encoding="UTF-8" ?>
        <prtg>
            <result>
             <channel>
               Message
             </channel>
             <value>
             $f1
             </value>
            </result>
        </prtg>
    "@,$Datas[0]|Set-Content c:\temp\backup1.xml
    Donc, j'ai forcé la variable string sur $f1 pour vérifier le code de retour, cela à fonctionner parfaitement, maintenant mon souci est de récupérer le message. J'ai vu des dizaine de façon de faire diférente sur le net, mais aucune ne fonctionne. Celle-ci à le mérite de laisser le programme ce finir, mais elle me sort une fenêtre de saisi complétement indésirable :

    Nom : Capture.PNG
Affichages : 244
Taille : 9,2 Ko

    Je soupçonne cette ligne, $Datas[0]|Set-Content mais j'avoue ne pas bien reconnaitre.

    Je vais de toute façon continuer les recherche de mon coté ^^.

    PS : Pour une fois aucun message d'erreur

  3. #23
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Bonjour Fabien,
    le pb est sur la ligne Il manque la/les données à insérer dans le fichier et ce cmdlet ne renvoi pas de résultat.

    essai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    $FullPathName='C:\Users\Fabi3n\Desktop\472ED1A0-95DA-4E8B-847C-E08F84A9EDE3.xml'
    $Doc=Get-Content -path $FullPathName -Encoding utf8|Out-String
    $Result=$doc -split '\s*<\?xml version="1.0" encoding="UTF-8" \?\>'
    $Datas=$result|where {$_ -ne [string]::Empty}
    
    $TempFile='c:\temp\TempAconis.xml'
    if (Test-Path $TempFile )
    { Remove-Item $TempFile -Force }
    
    '<?xml version="1.0" encoding="UTF-8" ?>', $Datas[0]|Set-Content $TempFile 
    
    [XML]$DocBackup=get-content $TempFile
    $Message=$DocBackup.XML_SERIALIZER.entry.Message.Trim()
    
    @"
    <?xml version="1.0" encoding="UTF-8" ?>
        <prtg>
            <result>
             <channel>
               Message
             </channel>
             <value>
             $Message
             </value>
            </result>
        </prtg>
    "@|Set-Content c:\temp\backup1.xm

  4. #24
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Merci de ta réponse Laurent, mais je ne comprend pas ; pourquoi passes-tu par un tempfile ?
    N'est-ce pas plus simple et léger de le faire ne direct ?

    Puis j'ai les erreurs, je n'ai pas encore regardé mais je te les met.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Impossible de convertir la valeur «*System.Object[]*» en type «*System.Xml.XmlDocument*». Erreur*: «*Élément
     racine manquant.*»
    Au niveau de C:\Users\Fabi3n\Desktop\Nouveau document texte.ps1*: 22 Caractère*: 16
    + [XML]$DocBackup <<<< =get-content $TempFile
        + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
        + FullyQualifiedErrorId : RuntimeException
     
    Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
    Au niveau de C:\Users\Fabi3n\Desktop\Nouveau document texte.ps1*: 23 Caractère*: 43
    + $Message=$DocBackup.XML.entry.Message.Trim <<<< ()
        + CategoryInfo          : InvalidOperation: (Trim:String) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull
    Bien que je peuse que l'argument : -path , manque pour la première erreur ce qui donnerais la ligne :

    [XML]$DocBackup=get-content -path $TempFile, je m'en vais tester cela

  5. #25
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fabi3n Voir le message
    Merci de ta réponse Laurent, mais je ne comprend pas ; pourquoi passes-tu par un tempfile ?
    N'est-ce pas plus simple et léger de le faire ne direct ?
    Il faut déjà valider le principe de base.
    Effectivement on peut se passer du fichier temporaire, mais je te laisserais réaliser cette évolution.

    Citation Envoyé par Fabi3n Voir le message
    Puis j'ai les erreurs
    Peut être as-tu des pb de droits sur C:\temp ou le répertoire n'existe pas ?
    Je viens de tester à nouveau, cela fonctionne. Le contenu de $FullPathName doit référencer le fichier à transformer (issu de ton soft) et pas un fichier transformé.
    Vérifie si c'est le cas.

  6. #26
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Laurent Dardenne Voir le message
    Peut être as-tu des pb de droits sur C:\temp ou le répertoire n'existe pas ?
    Si le dossier C:/temp existe puisque j'ai du le créé pour le premier xml backup1.xml, et je n'ai aucun problème de droit.
    Citation Envoyé par Laurent Dardenne Voir le message
    Je viens de tester à nouveau, cela fonctionne. Le contenu de $FullPathName doit référencer le fichier à transformer (issu de ton soft) et pas un fichier transformé.
    Vérifie si c'est le cas.
    C'est la que le bas blesse, c'est le cas !

  7. #27
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Vérifie le contenu du fichier $TempFile.

  8. #28
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Le contenu de TempFile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-8" ?>
    j'ai corrigé une erreur (apparement un simple espace), ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $FullPathName='C:\Users\Fabi3n\Desktop\472ED1A0-95DA-4E8B-847C-E08F84A9EDE3.xml'
    $Doc=Get-Content -path $FullPathName -Encoding utf8|Out-String
    $Result=$doc -split '\s*<\?xml version="1.0" encoding="UTF-8" \?\>'
    $Datas=$result|where {$_ -ne [string]::Empty}
    $TempFile='c:\temp\TempAconis.xml'
    if (Test-Path $TempFile )
    { Remove-Item $TempFile -Force }
    
    '<?xml version="1.0" encoding="UTF-8" ?>', $Datas[0]|Set-Content $TempFile 
    
    [XML]$DocBackup=get-content $TempFile
    $Message=$DocBackup.XML.entry.Message.Trim()
    @"
    <?xml version="1.0" encoding="UTF-8" ?>
        <prtg>
            <result>
             <channel>
               Message
             </channel>
             <value>
             $Message
             </value>
            </result>
        </prtg>
    "@|Set-Content c:\temp\backup1.xml
    Avec donc comme erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Au caractère C:\Users\Fabi3n\Desktop\Nouveau document texte.ps1:17 : 25
    + if (Test-Path $TempFile )
    +                         ~
    Bloc d’instruction manquant après if ( condition ).
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : MissingStatementBlock
    EDIT : correction de l'erreur débile d'opérateur pour une vrai erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Impossible d’appeler une méthode dans une expression Null.
    Au caractère C:\Users\Fabi3n\Desktop\Nouveau document texte.ps1:23 : 1
    + $Message=$DocBackup.XML.entry.Message.Trim()
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation : (:) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull
    Cte coup-ci comme d'habitude il 'arrive pas à lire dans le XML. Retour au points de départ pour moi. Je continue mes investiguation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $FullPathName='C:\Users\Fabi3n\Desktop\472ED1A0-95DA-4E8B-847C-E08F84A9EDE3.xml'
    $Doc=Get-Content -path $FullPathName -Encoding utf8|Out-String
    $Result=$doc -split '\s*<\?xml version="1.0" encoding="UTF-8" \?\>'
    $Datas=$result|where {$_ -ne [string]::Empty}
    $TempFile='c:\temp\TempAconis.xml'
    if (Test-Path $TempFile )
    { Remove-Item $TempFile -Force }
    
    '<?xml version="1.0" encoding="UTF-8" ?>', $Datas[0]|Set-Content $TempFile 
    
    [XML]$DocBackup=get-content $TempFile
    $Message=$DocBackup.XML.entry.Message.Trim()
    @"
    <?xml version="1.0" encoding="UTF-8" ?>
        <prtg>
            <result>
             <channel>
               Message
             </channel>
             <value>
             $Message
             </value>
            </result>
        </prtg>
    "@|Set-Content c:\temp\backup1.xml
    PS : mon patron est devenu tolèrent, il m’autorise la V.2 de powershell !

    CHAMPOMI !

  9. #29
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    J'ai trouvé AAAAAAAAAARG !

    dans ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $FullPathName='C:\Users\Fabi3n\Desktop\472ED1A0-95DA-4E8B-847C-E08F84A9EDE3.xml'
    $Doc=Get-Content -path $FullPathName -Encoding utf8|Out-String
    $Result=$doc -split '\s*<\?xml version="1.0" encoding="UTF-8" \?\>'
    $Datas=$result|where {$_ -ne [string]::Empty}
    $TempFile='c:\temp\TempAconis.xml'
    if (Test-Path $TempFile )
    { Remove-Item $TempFile -Force }
    
    '<?xml version="1.0" encoding="UTF-8" ?>', $Datas[0]|Set-Content $TempFile 
    
    [XML]$DocBackup=get-content $TempFile
    $Message=$DocBackup.XML.entry.Message.Trim()
    @"
    <?xml version="1.0" encoding="UTF-8" ?>
        <prtg>
            <result>
             <channel>
               Message
             </channel>
             <value>
             $Message
             </value>
            </result>
        </prtg>
    "@|Set-Content c:\temp\backup1.xml
    Il faut remplacer la ligne en rouge par $doc ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $FullPathName='C:\Users\Fabi3n\Desktop\472ED1A0-95DA-4E8B-847C-E08F84A9EDE3.xml'
    $Doc=Get-Content -path $FullPathName -Encoding utf8|Out-String
    $Result=$doc -split '\s*<\?xml version="1.0" encoding="UTF-8" \?\>'
    $Datas=$result|where {$_ -ne [string]::Empty}
    $TempFile='c:\temp\TempAconis.xml'
    if (Test-Path $TempFile )
    { Remove-Item $TempFile -Force }
    
    $Doc, $Datas[0]|Set-Content $TempFile 
    
    [XML]$DocBackup=get-content $TempFile
    $Message=$DocBackup.XML.entry.Message.Trim()
    @"
    <?xml version="1.0" encoding="UTF-8" ?>
        <prtg>
            <result>
             <channel>
               Message
             </channel>
             <value>
             $Message
             </value>
            </result>
        </prtg>
    "@|Set-Content c:\temp\backup1.xml
    Donc il me sort dans le temp file le contenu de mon xml et dans le backup1.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8" ?>
        <prtg>
            <result>
             <channel>
               Message
             </channel>
             <value>
             Browsing contents of avfs:/local
             </value>
            </result>
        </prtg>
    TALALATLATLALTALtpzaeout_zeçuf_ç'uzçfhyé"ç_rè_z"y_dcçyz"è_ypçéaY34678RYZFY¨QYUEPN9UA3DR8Y <ihcà7A Y2E782a

    Oui je suis content

    Dans tous les cas merci Laurent, tu m'as bien sauvé la mise sur ce coup

    Comment te remercier ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Récupérer un MCD depuis Oracle 9
    Par lenoil dans le forum PowerAMC
    Réponses: 2
    Dernier message: 23/04/2015, 17h17
  2. [XSLT] Récupérer le nom du fichier XML
    Par silverspike dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/04/2006, 14h01
  3. Réponses: 5
    Dernier message: 08/09/2005, 20h33
  4. [JSP]recuperer session-timeout dans web.xml
    Par seb_fou dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/05/2004, 16h01
  5. Réponses: 6
    Dernier message: 04/01/2004, 20h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo