Question [Résolu]la fonction -replace

Plus d'informations
il y a 7 ans 11 mois #25513 par Corentin
Réponse de Corentin sur le sujet Re:la fonction -replace
Le problème du replace est résolu, j'ai donc pu insérer cette fonction dans programme principal, le but de celui ci étant :

- récupérer des données dans un fichier csv,
- en fonction d'un fichier modèle remplacer donc les données comme vu au dessus
- pour pouvoir créer en fin de programme un fichier par école.

Pour cela j'ai essayer une boucle do / until

Ce programme fonctionne en soit mais ne me sort qu'un seul fichier, celui du premier de la liste de mon csv.

J'aimerais donc trouver une solution pour que une fois le programme lancé je n'ai pas qu'un seul fichier de créer mais un par école.

J'espère que c'est clair car c'est un peu compliqué :dry: :S
Mon code :
[code:1]$MonCsv = \"C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv\"
import-csv -Path $MonCsv

do{
foreach ($Ligne in $MonCsv){
$Ligne = get-content -Path $MonCsv | Select-Object -Index 1

$ligne_splitted = $Ligne.split(\",\")
$NOM_ECOLE = $ligne_splitted[0]
$ADDR_FW_LAN = $ligne_splitted[1]
$ADDR_POOL_DHCP_LAN = $ligne_splitted[2]
$ADDR_FW_WAN = $ligne_splitted[3]
$ADDR_MASK_WAN = $ligne_splitted[4]
$ADDR_GW_WAN = $ligne_splitted[5]
$MAC_FW = $ligne_splitted[6]

$content = Get-Content \"C:\Users\Corentin.FOURRIER\Documents\clish\autoconf.ADDR-MAC-MODELE.clish\" | foreach { $_ -replace \"<NOM_ECOLE>\",$NOM_ECOLE -replace \"<ADDR_FW_LAN>\", $ADDR_FW_LAN -replace \"<ADDR_POOL_DHCP_LAN>\", $ADDR_POOL_DHCP_LAN -replace \"<ADDR_FW_WAN>\", $ADDR_FW_WAN -replace \"<ADDR_MASK_WAN>\", $ADDR_MASK_WAN -replace \"<ADDR_GW_WAN>\", $ADDR_GW_WAN -replace \"<MAC_FW>\", $MAC_FW }
Set-Content -Path \"C:\Users\Corentin.FOURRIER\Documents\clish\autoconf.$MAC_FW.modif.clish\" -Value $content
}
} until ($Ligne -ne $null)
[/code:1]<br><br>Message édité par: Corentin, à: 5/06/18 14:43

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 11 mois #25518 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:la fonction -replace
Bonjour !

Vu ton code Corentin, ton fichier CSV ne doit pas être au bon format.

Pourrais-tu nous poster un extrait de ton fichier avec la ligne d'entête ?

Merci.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 11 mois #25520 par Philippe
Réponse de Philippe sur le sujet Re:la fonction -replace
j'ai l'impression que c'est mon stagiaire qui a écrit ce script (faute d'orthographe en moins) :laugh: :P

- mauvaise indentation qui complique la lecture du script :blink:
- imbrication de boucle inutile (le do/until en plus du foreach) :unsure:
- réutilisation/modification de la variable utilisé par la boucle foreach ($ligne) :evil:

sinon le script est bon si on enlève les redondances de boucle et la réutilisation frauduleuse de variable B)

je l'est pas tester, à toi de nous dire, voici la correction :
[code:1]

$NomfichierCsv = \&quot;C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv\&quot;
$MonCsv = import-csv -Path $NomfichierCsv

foreach ($Ligne in $MonCsv) {

$ligne_splitted = $Ligne.split(\&quot;,\&quot;«»)
$NOM_ECOLE = $ligne_splitted[0]
$ADDR_FW_LAN = $ligne_splitted[1]
$ADDR_POOL_DHCP_LAN = $ligne_splitted[2]
$ADDR_FW_WAN = $ligne_splitted[3]
$ADDR_MASK_WAN = $ligne_splitted[4]
$ADDR_GW_WAN = $ligne_splitted[5]
$MAC_FW = $ligne_splitted[6]

$tableau = @{
'&lt;NOM_ECOLE&gt;' = $NOM_ECOLE
'&lt;ADDR_FW_LAN&gt;' = $ADDR_FW_LAN
'&lt;ADDR_POOL_DHCP_LAN&gt;' = $ADDR_POOL_DHCP_LAN
'&lt;ADDR_FW_WAN&gt;' = $ADDR_FW_WAN
'&lt;ADDR_MASK_WAN&gt;' = $ADDR_MASK_WAN
'&lt;ADDR_GW_WAN&gt;' = $ADDR_GW_WAN
'&lt;MAC_FW&gt;' = $MAC_FW
}

$EmplacementFichierModele = \&quot;C:\Users\Corentin.FOURRIER\Documents\clish\autoconf.ADDR-MAC-MODELE.clish\&quot;
$EmplacementNouveauFichier = \&quot;C:\Users\Corentin.FOURRIER\Documents\clish\autoconf.$MAC_FW.clish\&quot;

get-content -Path $EmplacementFichierModele | foreach-object {
$NewLigne = $_

$tableau.GetEnumerator() | ForEach-Object {
if ($NewLigne -match $_.Key){
$NewLigne = $NewLigne -replace $_.Key, $_.Value
}
}
$NewLigne
} | Set-Content -Path $EmplacementNouveauFichier
}

[/code:1]

petite info : puisse que tu a un fichier CSV il est inutile de faire des splits
tu peut utilisé le nom des colonnes de la premiere ligne du fichier CSV comme nom de propriété,
les nom utilisé ici sont des exemple :
[code:1]
# si le fichier contient seci :
#\&quot;nom ecole\&quot;, fw_Lan, DHCP, FW_WAN, ADDR_MASK_WAN, passerelle, MAC_FW
#\&quot;ecole jean mermoz\&quot;, \&quot;192.168.10.200\&quot;, \&quot;192.168.10.1-192.168.10.100\&quot;, \&quot;192.168.10.250\&quot;, \&quot;255.255.255.0\&quot;, \&quot;192.168.10.254\&quot;, \&quot;01-00-5e-7f-ff-fa\&quot;

# code associer
$MonCsv = import-csv -Path $NomfichierCsv -Delimiter \&quot;,\&quot;
.
.
.
$NOM_ECOLE = $ligne.\&quot;nom ecole\&quot;
$ADDR_FW_LAN = $ligne.fw_Lan
$ADDR_POOL_DHCP_LAN = $ligne.DHCP
$ADDR_FW_WAN = $ligne.FW_WAN
$ADDR_MASK_WAN = $ligne.ADDR_MASK_WAN
$ADDR_GW_WAN = $ligne.passerelle
$MAC_FW = $ligne.MAC_FW
[/code:1]c'est plus clair et $ligne_splitted devient inutile<br><br>Message édité par: 6ratgus, à: 5/06/18 14:47

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 11 mois #25521 par Corentin
Réponse de Corentin sur le sujet Re:la fonction -replace
[code:1]NOM_ECOLE,ADDR_FW_LAN,ADDR_POOL_DHCP_LAN,ADDR_FW_WAN,ADDR_MASK_WAN,ADDR_GW_WAN,MAC_FW
EM_CARTERET,192.168.10.1,192.168.10.1-192.168.10.2,192.168.10.1,255.255.255.0,192.168.10.1,00-1C-7F-7E-01-02[/code:1]
voici les deux premières lignes, les suivantes sont exactement pareils, je préfère ne pas les montrer j'ai pas envie d'avoir de problèmes je pense que les infos doivent rester confidentiel je prefere limiter la casse :laugh:

(je ne sais pas pourquoi il y a un espace je n'arrive pas à éditer correctement mais rassurer vous il n'y a pas l'espace dans mon fichier)<br><br>Message édité par: Corentin, à: 5/06/18 14:48

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 11 mois #25523 par Corentin
Réponse de Corentin sur le sujet Re:la fonction -replace
6ratgus écrit:

j'ai l'impression que c'est mon stagiaire qui a écrit ce script (faute d'orthographe en moins) :laugh: :P


effectivement je suis en stage :laugh:
J'ai pourtant passer 5 bonne minutes à éditer pour avoir une bonne indentation :pinch: :(

Merci pour votre réponse je vais tester ça.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 11 mois #25524 par Corentin
Réponse de Corentin sur le sujet Re:la fonction -replace
Grâce à vos réponses, mon programme fonctionne !!! :laugh: B)

Merci énormément pour vos réponses !!
Cependant j'ai peut être une solution pour optimiser un peu le code (le moins de ligne possible) :
enlever la première étape
seulement ça me génere que la dernière ligne de mon fichier csv, ce n'est donc pas possible ?

[code:1]$NomfichierCsv = \&quot;C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv\&quot;
$MonCsv = import-csv -Path \&quot;C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv\&quot; -Delimiter \&quot;,\&quot;

foreach ($Ligne in $MonCsv) {

$tableau = @{
'&lt;NOM_ECOLE&gt;' = $ligne.NOM_ECOLE
'&lt;ADDR_FW_LAN&gt;' = $ligne.ADDR_FW_LAN
'&lt;ADDR_POOL_DHCP_LAN&gt;' = $ligne.ADDR_POOL_DHCP_LAN
'&lt;ADDR_FW_WAN&gt;' = $ligne.ADDR_FW_WAN
'&lt;ADDR_MASK_WAN&gt;' = $ligne.ADDR_MASK_WAN
'&lt;ADDR_GW_WAN&gt;' = $ligne.ADDR_GW_WAN
'&lt;MAC_FW&gt;' = $ligne.MAC_FW
}

$EmplacementFichierModele = \&quot;C:\Users\Corentin.FOURRIER\Documents\clish\autoconf.ADDR-MAC-MODELE.clish\&quot;
$EmplacementNouveauFichier = \&quot;C:\Users\Corentin.FOURRIER\Documents\ListeEcole\autoconf.$MAC_FW.clish\&quot;

get-content -Path $EmplacementFichierModele | foreach-object {
$NewLigne = $_

$tableau.GetEnumerator() | ForEach-Object {
if ($NewLigne -match $_.Key){
$NewLigne = $NewLigne -replace $_.Key, $_.Value
}
}
$NewLigne
} | Set-Content -Path $EmplacementNouveauFichier
}
[/code:1]<br><br>Message édité par: Corentin, à: 5/06/18 15:35

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.047 secondes
Propulsé par Kunena