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...