none
Modifier un fichier texte en powershell RRS feed

  • Question

  • Bonjour,

    Je dois remplacer une valeur contenu dans un fichier texte par une autre valeur correspondant au trois derniers caractères du nom du PC.  

    Exemple : Si le nom du PC est PC-001, j'ai besoin de récupérer 001 pour l'insérer dans une ligne d'un fichier texte.  

    J'ai réussi à faire ce code :

    $NAMECOMPUTER = hostname
    (get-content C:\Users\fabien\Documents\fichier.bat) | %{$_ -replace "=1","=$NAMECOMPUTER"} | set-content C:\Users\fabien\Documents\fichier.bat
       

    Mais avec ce code je peux insérer tout le hostname et non les trois derniers caractères.

    Pourriez-vous m'aider à écrire ce script ?

    D'avance merci

    jeudi 3 mai 2018 08:47

Réponses

  • Un truc comme ça ?

    $computer = $env:computername
    $texte=$computer.Substring($computer.Length-3,3)
    $nom=$texte
    if ($texte[0] -eq "0")
    {
        $nom=$texte.substring($texte.length-2,2)
        if ($texte[1] -eq "0")
        {
            $nom=$texte.substring($texte.length-1,1)
        }
    }
    (get-content C:\Users\fabien\Documents\fichier.bat) | %{$_ -replace "=1","=$nom"} | set-content C:\Users\fabien\Documents\fichier.bat


    Merci de marquer comme reponses les interventions qui vous ont ete utile.

    • Marqué comme réponse Fabien-VIRT jeudi 3 mai 2018 12:07
    jeudi 3 mai 2018 09:55

Toutes les réponses

  • Bonjour,

    Vous pouvez utiliser la méthode substring

    $NAMECOMPUTER = $env:computername
    $texte=$NAMECOMPUTER.Substring($NAMECOMPUTER.Length-3,3)
    (get-content C:\Users\fabien\Documents\fichier.bat) | %{$_ -replace "=1","=$NAMECOMPUTER"} | set-content C:\Users\fabien\Documents\fichier.bat


    Merci de marquer comme reponses les interventions qui vous ont ete utile.

    jeudi 3 mai 2018 08:59
  • Merci matteu

    Je viens de test mais ça reprend toujours l'intégralité du nom du PC

    jeudi 3 mai 2018 09:02
  • Si je fais ça, ça fonctionne :

    $texte=$env:computername.Substring($env:computername.Length-3,3)

    (get-content C:\Users\fabien\Documents\fichier.bat) | %{$_ -replace "=1","=$NAMECOMPUTER"} | set-content C:\Users\fabien\Documents\fichier.bat


    jeudi 3 mai 2018 09:12
  • C'est normal c'est ma faute xD

    Il faut dans la dernière ligne utiliser $texte et non plus $namecomputer :)

    $NAMECOMPUTER = $env:computername
    $texte=$NAMECOMPUTER.Substring($NAMECOMPUTER.Length-3,3)
    (get-content C:\Users\fabien\Documents\fichier.bat) | %{$_ -replace "=1","=$texte"} | set-content C:\Users\fabien\Documents\fichier.bat


    Merci de marquer comme reponses les interventions qui vous ont ete utile.


    jeudi 3 mai 2018 09:27
  • Impec !!

    Et maintenant, j'essaie de supprimer les zéro s'ils sont devant une valeur positive.

    En gros il faut que pour un Pc qui s'appelle PC-001 je ne conserve que le 1

    Pour un PC qui s'appelle PC-020, je ne conserve que 20

    Pour un PC qui s'appelle PC-120, je conserve 120

    C'est possible ?

    jeudi 3 mai 2018 09:39
  • Un truc comme ça ?

    $computer = $env:computername
    $texte=$computer.Substring($computer.Length-3,3)
    $nom=$texte
    if ($texte[0] -eq "0")
    {
        $nom=$texte.substring($texte.length-2,2)
        if ($texte[1] -eq "0")
        {
            $nom=$texte.substring($texte.length-1,1)
        }
    }
    (get-content C:\Users\fabien\Documents\fichier.bat) | %{$_ -replace "=1","=$nom"} | set-content C:\Users\fabien\Documents\fichier.bat


    Merci de marquer comme reponses les interventions qui vous ont ete utile.

    • Marqué comme réponse Fabien-VIRT jeudi 3 mai 2018 12:07
    jeudi 3 mai 2018 09:55
  • ça semble parfait. Merci beaucoup 
    jeudi 3 mai 2018 12:07