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 :

Unique occurrence select-string !


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut Unique occurrence select-string !
    Bonjour à toutes et tous. Je suis un petit nouveau (enfin ... petit d'1,92m et 49 ans) et je fais mes premiers pas en powershell (comme quoi, il n'est jamais trop tard pour s'instruire). Je bosse comme Field Engineer dans une boîte de consultance et mon boulot principal est d'installer du soft, le configurer et donner des formations aux utilisateurs ... en clair, je me débrouille avec un pc, mais je n'ai aucune notion de programmation, scripting etc ...

    Cependant, j'ai eu envie d'en savoir plus, et pour mon taf, j'ai un parc de plusieurs machines (environs 250 en fait) qui sont réparties sur autant de sites différents et je dois faire des mises à jour de ces machines ... de préférence en remote. J'ai donc construit un package d'installation qui contient tout ce qui doit être mis à jour, remplacé, supprimé, mais je dois récupérer de l'info dans 2 fichiers (un .xml et un .config).

    Dans le .xml, l'info se compose d'un N° de téléphone, un n° de fax, une localité, et du nom du service qui utilise l'application. Il y a 8 modules différents décrits dans cet XML et qui utilisent les mêmes infos.
    Dans le .config, il y a les identifiants de la machine, (un nom, un ID) et une adresse email.

    J'ai déjà en y allant à tâtons créé un petit script Powershell qui automatise toute l'installation ... arrêt des services concernés (get-service <name*> | stop-service )
    J'arrête les process en cours (get-process <name*> | stop process
    Je fais un backup des applications qui doivent être upgradées (robocopy <source> /s <destination> /it /is
    Je désinstalle les msi (get-package -<name> | uninstall-package
    et enfin, j'installe la nouvelle version via un simple msiexec -i <path to msimsi> /quiet avant de rebooter tout le machin.

    Et, jusqu'à présent, ça marche.

    Par contre, je reviens au tout début de mon explication avec la commande get-content pathnomfichier.xml | select-string -pattern 'mes','recherches' | out-file pathout.txt ... comme je l'ai dit, il y a 8 modules différents qui sont configurés et qui utilisent la même info ... donc, quand je récupère ces données, dans mon fichier log (start-transcript), j'ai bien 8 fois le n° de tél, 8 fois le fax, etc, etc ...
    Est-ce que vous pouvez me dire comment améliorer mon log afin de n'avoir que cette information 1 seule fois, et si possible mise en forme ?

    Actuellement, il me donne ce genre de résultat dans mon log :

    IgnoreCase : True
    LineNumber : 13
    Line : <Setting Key="DefaultFax" Type="String" Value="FAX" />
    Filename : InputStream
    Path : InputStream
    Pattern : DefaultFax
    Context :
    Matches : {0}

    IgnoreCase : True
    LineNumber : 14
    Line : <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
    Filename : InputStream
    Path : InputStream
    Pattern : DefaultOriginalDepartment
    Context :
    Matches : {0}

    Etc ... etc ... et donc me donne les 6 valeurs que je recherche ... 8x et sous cette forme. J'aimerais avoir ça 1 seule fois (1x pour le n° de téléphone, 1x pour le OriginalDepartment, 1x ... etc ..). Et en fait, la seule chose qui m'intéresserait, c'est d'avoir la valeur de setting key et la String value.

    Une longue explication pour un tout petit problème je suppose, mais bon voilà ... le confinement fait qu'on a envie de parler

    Merci.
    Rudy

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    msiexec -i
    Je ne connaissais pas cette permissivité de Windows Installer

    Peux tu nous transmettre le xml pour qu'on puisse t'aider ainsi qu'un exemple de la sortie souhaitez.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut
    Bonjour, et déjà merci de t'intéresser à ma question.

    Malheureusement je ne peux pas partager l'xml, car il contient des données d'identification... et .. bin je n'ai pas le droit de les divulguer ... Donc je vais essayer de rendre anonyme tout en restant compréhensible



    Voici ma ligne de commande :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    get-content 'c:\progra~2\MASKED\PROGNAME\configuration\registrations.xml' | select-string -pattern 'DefaultFax','DefaultOriginalDepartment','DefaultPlace','DefaultSender','DefaultTel'
    get-content 'c:\progra~2\MASKED\PROGNAME\application.config' | select-string -pattern 'WorkstationName','WorkstationId','SenderEmailAddress'

    Voici la réponse qu'il me donne en console ... Dans le log, c'est présenté différemment : (dans ce cas, je ne donne l'output que de la première commande sur "registrations.xml"

    Code XML : 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
    33
    34
    35
    36
    37
    38
    39
    40
              <Setting Key="DefaultFax " Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace " Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel " Type="String" Value="0000" />
              <Setting Key="DefaultFax " Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace " Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel " Type="String" Value="0000" />
              <Setting Key="DefaultFax " Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace " Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel " Type="String" Value="0000" />
              <Setting Key="DefaultFax " Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace " Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel " Type="String" Value="0000" />
              <Setting Key="DefaultFax " Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace " Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel " Type="String" Value="0000" />
              <Setting Key="DefaultFax " Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace " Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel " Type="String" Value="0000" />
              <Setting Key="DefaultFax " Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace " Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel " Type="String" Value="0000" />
              <Setting Key="DefaultFax " Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace " Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel " Type="String" Value="0000" />

    Dans le log, c'est présenté comme 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Transcript started, output file is c:\MASKED\backup\update\'202003301255'_spring2020.txt
    
    30 March 2020 12:55:28
    
    IgnoreCase : True
    LineNumber : 13
    Line       : <Setting Key="DefaultFax " Type="String" Value="FAX" />
    Filename   : InputStream
    Path       : InputStream
    Pattern    : DefaultFax 
    Context    :
    Matches    : {0}
    
    
    IgnoreCase : True
    LineNumber : 14
    Line       : <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
    Filename   : InputStream
    Path       : InputStream
    Pattern    : DefaultOriginalDepartment
    Context    :
    Matches    : {0}
    
    
    IgnoreCase : True
    LineNumber : 15
    Line       : <Setting Key="DefaultPlace " Type="String" Value="City" />
    Filename   : InputStream
    Path       : InputStream
    Pattern    : DefaultPlace 
    Context    :
    Matches    : {0}
    
    
    IgnoreCase : True
    LineNumber : 16
    Line       : <Setting Key="DefaultSender" Type="String" Value="0000" />
    Filename   : InputStream
    Path       : InputStream
    Pattern    : DefaultSender
    Context    :
    Matches    : {0}
    
    
    IgnoreCase : True
    LineNumber : 17
    Line       : <Setting Key="DefaultTel " Type="String" Value="TEL" />
    Filename   : InputStream
    Path       : InputStream
    Pattern    : DefaultTel 
    Context    :
    Matches    : {0}

    Donc, si je pouvais avoir l'info sous forme d'un tableau ... 2 colonnes avec d'un côté le "Setting key" (par exemple 'DefaultTel' et de l'autre la 'value', ça serait parfait.

    Le fichier XML ressemble à ceci :

    Désolé, j'ai dû aussi le rendre anonyme ... mais l'idée principale est là :

    Code XML : 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
    33
    34
    35
    36
    37
    38
    39
    40
    <?xml version="1.0" encoding="utf-8"?>
    <ArrayOfRegistration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Registration>
        <RegistrationName>MODULE1</RegistrationName>
        <Modules>
          <RegistrationElement>
            <TargetDLL>123Wpf.FlatbedAlphaBE.dll</TargetDLL>
            <TargetClass>UcPluginTpAlphaBE</TargetClass>
            <Text>Zaak details</Text>
            <LanguageKey>CaseInput</LanguageKey>
            <ImageIcon>pack://application:,,,/MASKED;component/resources/images/32/notebook.png</ImageIcon>
            <PluginSettings>
              <Setting Key="DefaultFax" Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace" Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel" Type="String" Value="0000" />
            </PluginSettings>
          </RegistrationElement>
     
            <Registration>
        <RegistrationName>MODULE2</RegistrationName>
        <Modules>
          <RegistrationElement>
            <TargetDLL>123Wpf.ScannerAlphaBE.dll</TargetDLL>
            <TargetClass>UcPluginTpAlphaBE</TargetClass>
            <Text>Zaak details</Text>
            <LanguageKey>CaseInput</LanguageKey>
            <ImageIcon>pack://application:,,,/MASKED;component/resources/images/32/notebook.png</ImageIcon>
            <PluginSettings>
              <Setting Key="DefaultFax" Type="String" Value="000" />
              <Setting Key="DefaultOriginalDepartment" Type="String" Value="Dept" />
              <Setting Key="DefaultPlace" Type="String" Value="City" />
              <Setting Key="DefaultSender" Type="String" Value="4805" />
              <Setting Key="DefaultTel" Type="String" Value="0000" />
            </PluginSettings>
          </RegistrationElement>
     
     
          etc ... etc ...

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Le XML est non conforme peux tu poster le fichier complet

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    J'ai essayé de le rendre viable ton XML.



    Voici un exemple :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml = [XML](Get-Content -Path "test.xml")
    $xml.ArrayOfRegistration.RegistrationElement.PluginSettings.Setting | Select-Object -Property @{Label=”Setting key”;Expression={($_.Key)}}, @{Label=”Value”;Expression={($_.Value)}}

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut
    Helloooo .... Non désolé, je ne peux pas envoyer l'xml complet ...

    Après remplacement des guillemets autour de "Setting Key" et "Value" par un single quote je peux lancer mon script (avant le remplacement des guillemets, j'avais un message d'erreur


    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml = [XML](Get-Content -path $registrationsxml)
    $xml.ArrayOfRegistration.RegistrationElement.PluginSettings.Setting | Select-Object -Property @{Label = 'Setting key';Expression={($_.Key)}}, @{Label = 'Value';Expression={($_.Value)}}

    ... cependant j'ai toujours la même présentation :

    Nom : result.png
Affichages : 100
Taille : 25,5 Ko

    et il me sort toujours tous les résultats (soit 8x puisque ces informations sont présentes 8 fois dans le fichier xml)

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Le résultat sur l'imprime écran ne correspond pas au code, ca ressemble plus à un select-string avec des patterns, ignorecase

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut Résolu en partie :-)
    Bon ... j'ai trouvé une partie de la réponse.

    en utilisant cette syntaxe :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select-string -path <lepath> -pattern '1terme_recherché' -list -singlematch
    select-string -path <lepath> -pattern '2terme_recherché' -list -singlematch
    etc ...

    J'obtiens une liste avec 1 seule fois le terme, et pas les 8 fois comme avant. Donc, j'en déduis que -singlematch ne fonctionne pas quand on utilise le pipeline.

    Il me reste maintenant à trouver comment faire pour afficher en 2 colonnes : setting key et Value

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Et bien, puisque tu semble absolument vouloir utiliser de la recherche textuel Select-string pour traiter un XML, je te souhaites bon courage.

Discussions similaires

  1. [MySQL-5.5] SELECT string après un caractère spécifique
    Par nebulla dans le forum Requêtes
    Réponses: 7
    Dernier message: 09/02/2018, 01h06
  2. [PowerShell] Select-string Simple
    Par lefoot dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 11/11/2015, 21h45
  3. Liste dynamique avec valeur unique de selected
    Par livininchina dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2012, 15h43
  4. Réponses: 2
    Dernier message: 07/09/2010, 20h57
  5. Uniquement les premiers string d'une chaîne
    Par lucazzo dans le forum C#
    Réponses: 4
    Dernier message: 20/07/2010, 14h06

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