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 "=" :
Ca, ca fonctionne.
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)
Ensuite, je fais une demande à l'utilisateur de rentrer ses informations via :
Et c'est là que ca se complique.
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
Maintenant je veux changer les valeurs du fichier texte. Voilà ce que je faisais :
Prenons l'exemple de la ligne "rootUser=root"
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
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 :
N'y a t-il pas moyen de modifier cette commande pour
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
1) rechercher UNIQUEMENT sur la ligne 3 du fichier a.txt
un peu comme le :
2) rechercher UNIQUEMENT à partir du "=" ou de x nombre de lettres
Code : Sélectionner tout - Visualiser dans une fenêtre à part Get-Content -Path "a.txt" | where { $_ -ne "$null" } | Select-Object -Index 0
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...
Partager