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 :

modifier chaine ligne n après caractère "=" [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2007
    Messages : 93
    Par défaut modifier chaine ligne n après caractère "="
    Bonjour à tous,
    J'ai un script powershell qui doit lire/modifier un fichier texte.
    voilà ce qu'il contient :

    premierPassage=vrai
    adresseIP=x.x.x.x
    rootUser=root
    rootPassword=password

    J'ai un premier bout de code qui récupère les informations situées après les "=" :

    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
    # le premier passage
    $premierPassage = Get-Content -Path "a.txt" | where { $_ -ne "$null" } | Select-Object -Index 0
    $premierPassage = $premierPassage.replace(" ","")
    $premierPassage = $premierPassage.Substring(15)
    
    # l'adresseIP
    $adresseIP = Get-Content -Path "a.txt" | where { $_ -ne "$null" } | Select-Object -Index 1
    $adresseIP = $adresseIP.replace(" ","")
    $adresseIP = $adresseIP.Substring(10)
    
    # le nom d'utilisateur
    $user = Get-Content -Path "a.txt" | where { $_ -ne "$null" } | Select-Object -Index 2
    $user = $user.replace(" ","")
    $user = $user.Substring(9)
    
    # le mot de passe d'utilisateur vSphere
    $password = Get-Content -Path "a.txt" | where { $_ -ne "$null" } | Select-Object -Index 3
    $password = $password.replace(" ","")
    $password = $password.Substring(13)
    Ca, ca fonctionne.

    Ensuite, je fais une demande à l'utilisateur de rentrer ses informations via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $premierPassage = Read-Host
    $newAdresseIP = Read-Host
    $newUser = Read-Host
    $newPassword = Read-Host
    Et c'est là que ca se complique.
    Maintenant je veux changer les valeurs du fichier texte. Voilà ce que je faisais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $remplacer = Get-Content "a.txt" | foreach { $_ -replace $adresseIP,$newAdresseIP } 
    Set-Content -Path "a.txt" -Value $remplacer
    
    $remplacer = Get-Content "a.txt" | foreach { $_ -replace $user,$newUser } 
    Set-Content -Path "a.txt" -Value $remplacer
    
    $remplacer = Get-Content "a.txt" | foreach { $_ -replace $password,$newPassword } 
    Set-Content -Path "a.txt" -Value $remplacer
    Prenons l'exemple de la ligne "rootUser=root"
    si je remplace $user (root) par $newUser (admin)
    "rootUser=root" va devenir "adminUser=admin"
    et du coup, tout plante !

    J'ai bien la possibilité de modifier "rootUser=root" en "r_o_o_t__u_s_e_r=root"
    histoire d'être sûr que l'utilisateur ne rentre pas la même chose que ce qu'il y a avant le "=" mais je ne veux prendre aucun risque...

    Ma question est donc :
    On a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $remplacer = Get-Content "a.txt" | foreach { $_ -replace $user,$newUser } 
    Set-Content -Path "a.txt" -Value $remplacer
    N'y a t-il pas moyen de modifier cette commande pour
    1) rechercher UNIQUEMENT sur la ligne 3 du fichier a.txt
    un peu comme le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-Content -Path "a.txt" | where { $_ -ne "$null" } | Select-Object -Index 0
    2) rechercher UNIQUEMENT à partir du "=" ou de x nombre de lettres

    D'avance merci à tous !


    EDIT : Je viens de penser à quelque chose :
    L'utilisation de doubles quotes sur les infos situées après mon "=" pourraient m'aider? je rechercherai donc que ce qu'il y a entre double quotes... (Comment faire?) mais faudrait toujours régler le problème de rechercher dans telle ligne uniquement...

  2. #2
    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
    Billets dans le blog
    1
    Par défaut
    Salut,
    l'objectif de ton traitement c'est bien de lire un fichier texte existant, puis de saisir des données et enfin d'insérer ces données dans le même fichier ?
    T'es-t-il possible de le reconstruire au lieu de le modifier ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2007
    Messages : 93
    Par défaut
    L'objectif est bien celui-ci !
    Reconstruire le fichier. Donc le supprimer et le refaire avec les bonnes valeurs...
    Oui, je ne vois pas (pour l'instant) de problème à cela...

  4. #4
    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
    Billets dans le blog
    1
    Par défaut
    Ceci peut-il t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @"
    premierPassage=$premierPassage
    adresseIP=$newAdresseIP
    rootUser=$newUser
    rootPassword=$newPassword
    "@ > $pathFile

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2007
    Messages : 93
    Par défaut
    Euh, comme ça, non^^
    Tu peux me fournir des infos supplémentaires? (Je suis novice en scripting...)
    Tu mets ça où? script.ps1? a.txt?
    Les @" "@ correspondent à quoi?
    > $pathFile correspond à quoi?
    Qu'est-ce que c'est censé faire?

  6. #6
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par T3rm1nat0r Voir le message
    Les @" "@ correspondent à quoi?
    Une here-string, qui est une chaîne de caractères respectant le formatage tout en déclenchant la substitution de variable.
    Les noms de variable seront donc substitués par leur contenu.

    Citation Envoyé par T3rm1nat0r Voir le message
    Tu mets ça où? script.ps1? a.txt?
    Moi je ne le mets nulle part
    Place ces lignes après la saisie via read-host

    Citation Envoyé par T3rm1nat0r Voir le message
    > $pathFile correspond à quoi?
    Une redirection dans un fichier dont le nom est contenu dans la variable nommé $PathFile.

    Citation Envoyé par T3rm1nat0r Voir le message
    Qu'est-ce que c'est censé faire?
    Recrée le fichier sans avoir à faire un replace sur chaque occurence, et est une solution au "Et c'est là que ca se complique."

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importation de données caractères avec quote
    Par caro92 dans le forum SAS Base
    Réponses: 3
    Dernier message: 25/11/2015, 09h59
  2. caractères spéciaux quote ' dans insert
    Par couf35 dans le forum DB2
    Réponses: 1
    Dernier message: 30/04/2009, 18h27
  3. Retour à la ligne automatique après 50 caractères
    Par shintoisme dans le forum Langage
    Réponses: 3
    Dernier message: 30/11/2007, 10h00
  4. Réponses: 3
    Dernier message: 08/06/2007, 14h16

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