Flash info

"La connaissance ce n’est point la possession de la vérité, mais d’un langage cohérent."

Antoine de Saint Exupéry (1900-1944)

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
<< Début < Précédente 1 2 Suivante > Fin >>
Arnaud
Admin

Administrateur
Messages: 1208
graphgraph
Karma: 42  
Re:Problème de boucle - 12/06/18 09:06 Je ne retrouve pas ta réponse.

Peux tu la reposter STP ?
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
Corentin
Utilisateur

PowerShelleur Débutant
Messages: 27
graphgraph
Karma: 0  
Re:Problème de boucle - 12/06/18 09:09 NOM_ECOLE : EM_CARTERET
ADDR_FW_LAN : 192.168.10.1
ADDR_POOL_DHCP_LAN : 192.168.10.1:192.168.10.2
ADDR_FW_WAN : 192.168.10.1
ADDR_MASK_WAN : 255.255.255.0
ADDR_GW_WAN : 192.168.10.1
MAC_FW : 00-1C-7F-7E-01-02
PPPOE_USERNAME : fti/45271
PPPOE_PASSWORD : GOXFVK

Ceci, pour chaque ligne du fichier
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1208
graphgraph
Karma: 42  
Re:Problème de boucle - 12/06/18 09:20 Ok, c'est bien ce que je pensais. Je persiste, ton fichier CSV n'est à priori pas correct.

De ce que je vois, le délimiteur des données est le caractère ":" et non pas la virgule. Ce qui risque de poser problème car PowerShell ne saura pas faire la différence entre le délimiteur de données et une donnée qui contient le ":" comme :

Code:

  ADDR_POOL_DHCP_LAN 192.168.10.1:192.168.10.2



Pourrais-tu STP joindre à ton prochain post un extrait de ton fichier "CSV" ? Comme par exemple, l'entête ainsi que deux trois lignes de contenu ?

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
Corentin
Utilisateur

PowerShelleur Débutant
Messages: 27
graphgraph
Karma: 0  
Re:Problème de boucle - 12/06/18 09:27 J'ai récemment changé le délimiteur pour passer au point virgule car cela m'a régler un problème
Quand je met la virgule comme délimiteur, j'ai de nouvelles erreurs
Voici :
Code:

 NOM_ECOLE;ADDR_FW_LAN;ADDR_POOL_DHCP_LAN;ADDR_FW_WAN;ADDR_MASK_WAN;ADDR_GW_WAN;MAC_FW;PPPOE_USERNAME;PPPOE_PASSWORD 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;fti/45271;GOXFVK EM_Yser;192.168.10.2;192.168.11.1:192.168.11.2;192.168.10.2;255.255.255.0;192.168.10.2;00:1C:7F:7E:01:03



Message édité par: Corentin, à: 12/06/18 09:31
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1208
graphgraph
Karma: 42  
Re:Problème de boucle - 12/06/18 09:45 Bon, autant pour moi. Ton fichier CSV est correct.

Comme tu as un grand nombre de propriétés, PowerShell te montre le résultat au format "liste", d'où la présence des ":".

Mais en mémoire tu récupères bien un objet avec comme propriétés les noms des colonnes de ton fichier CSV.

Pour t'en assurer :
Code:

  $t import-csv .\test.csv -Delimiter ';' $t[-1] | Get-Member    TypeNameSystem.Management.Automation.PSCustomObject Name               MemberType   Definition                                          ----               ----------   ----------                                          Equals             Method       bool Equals(System.Object obj)                      GetHashCode        Method       int GetHashCode()                                   GetType            Method       type GetType()                                      ToString           Method       string ToString()                                   ADDR_FW_LAN        NoteProperty string ADDR_FW_LAN=192.168.10.2                     ADDR_FW_WAN        NoteProperty string ADDR_FW_WAN=192.168.10.2                     ADDR_GW_WAN        NoteProperty string ADDR_GW_WAN=192.168.10.2                     ADDR_MASK_WAN      NoteProperty string ADDR_MASK_WAN=255.255.255.0                  ADDR_POOL_DHCP_LAN NoteProperty string ADDR_POOL_DHCP_LAN=192.168.11.1:192.168.11.2 MAC_FW             NoteProperty string MAC_FW=00:1C:7F:7E:01:03                     NOM_ECOLE          NoteProperty string NOM_ECOLE=EM_Yser                            PPPOE_PASSWORD     NoteProperty object PPPOE_PASSWORD=null                          PPPOE_USERNAME     NoteProperty object PPPOE_USERNAME=null                         



Donc, si on reprend par rapport à ce que je t'avais demandé de faire à savoir $FichierCSV[-1]; pour moi tout est correct. La donnée n'est pas vide, puisqu'elle contient une valeur.

Message édité par: Arnaud, à: 12/06/18 09:45
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
Corentin
Utilisateur

PowerShelleur Débutant
Messages: 27
graphgraph
Karma: 0  
Re:Problème de boucle - 12/06/18 09:52 Pratique ce Get-Member effectivement merci ça me resservira plus tard!

Du coup je vous réexplique mon problème.
J'ai ce code qui fonctionne :
Code:

 $FichierCSV Import-Csv -Path "C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv" -Delimiter ";" $CompteurFichierPPPOE=0 $CompteurFichierFO=0 $compteur=0 $FichierCSV | ForEach {$_.MAC_FW $_.MAC_FW.replace(":","-")} $FichierCSV where {$_.NOM_ECOLE -ne ""} | foreach {          $ligne $_     if ($ligne.PPPOE_USERNAME -ne "" -and $ligne.PPPOE_USERNAME -ne $null){         $Modele Get-Content "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-PPPOE.clish" | foreach {         $_ -replace "<NOM_ECOLE>"$ligne.NOM_ECOLE -replace "<ADDR_FW_LAN>"$ligne.ADDR_FW_LAN -replace "<ADDR_POOL_DHCP_LAN>"$ligne.ADDR_POOL_DHCP_LAN  -replace "<ADDR_FW_WAN>"$ligne.ADDR_FW_WAN -replace "<ADDR_MASK_WAN>"$ligne.ADDR_MASK_WAN -replace "<ADDR_GW_WAN>"$ligne.ADDR_GW_WAN -replace "<MAC_FW>"$ligne.MAC_FW -replace "<PPPOE_USERNAME>"$ligne.PPPOE_USERNAME  -replace "<PPPOE_PASSWORD>"$ligne.PPPOE_PASSWORD}         Set-Content -Path "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.$($ligne.MAC_FW).clish" -Value $Modele         $CompteurFichierPPPOE++     }     else {         $Modele Get-Content "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-FO.clish" | foreach {         $_ -replace "<NOM_ECOLE>"$ligne.NOM_ECOLE -replace "<ADDR_FW_LAN>"$ligne.ADDR_FW_LAN -replace "<ADDR_POOL_DHCP_LAN>"$ligne.ADDR_POOL_DHCP_LAN  -replace "<ADDR_FW_WAN>"$ligne.ADDR_FW_WAN -replace "<ADDR_MASK_WAN>"$ligne.ADDR_MASK_WAN -replace "<ADDR_GW_WAN>"$ligne.ADDR_GW_WAN -replace "<MAC_FW>"$ligne.MAC_FW }         Set-Content -Path "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.$($ligne.MAC_FW).clish" -Value $Modele         $CompteurFichierFO++     }     $compteur++ } echo "Le programme a généré $compteur fichiers avec succés" echo "$CompteurFichierPPPOE fichiers PPPOE et $CompteurFichierFO fichiers FO"



Seulement pour l'optimiser j'aimerais qu'il y est une seule ligne de -replace (pour que se soit plus simple pour les futurs utilisateurs si ils doivent modifier le code.)
Pour cela j'ai essayé ce code :

Code:

 $FichierCSV Import-Csv -Path "C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv" -Delimiter ";" $CompteurFichierPPPOE=0 $CompteurFichierFO=0 $compteur=0 $FichierCSV | ForEach {$_.MAC_FW $_.MAC_FW.replace(":","-")} $FichierCSV where {$_.NOM_ECOLE -ne ""} | ForEach {     $ligne $_     if ($ligne.PPPOE_USERNAME -ne "" -and $ligne.PPPOE_USERNAME -ne $null){         $Modele Get-Content "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-PPPOE.clish"         $CompteurFichierPPPOE++     }     else {         $Modele Get-Content "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-FO.clish"         $CompteurFichierFO++     }     ForEach-Object {     $Modele -replace "<NOM_ECOLE>"$ligne.NOM_ECOLE -replace "<ADDR_FW_LAN>"$ligne.ADDR_FW_LAN -replace "<ADDR_POOL_DHCP_LAN>"$ligne.ADDR_POOL_DHCP_LAN  -replace "<ADDR_FW_WAN>"$ligne.ADDR_FW_WAN -replace "<ADDR_MASK_WAN>"$ligne.ADDR_MASK_WAN -replace "<ADDR_GW_WAN>"$ligne.ADDR_GW_WAN -replace "<MAC_FW>"$ligne.MAC_FW -replace "<PPPOE_USERNAME>"$ligne.PPPOE_USERNAME -replace "<PPPOE_PASSWORD>"$ligne.PPPOE_PASSWORD}     Set-Content -Path "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.$($_.MAC_FW).clish" -Value $Modele     $compteur++ } echo "Le programme a généré $compteur fichiers avec succés" echo "$CompteurFichierPPPOE fichiers PPPOE et $CompteurFichierFO fichiers FO"



Il ne fonctionnne pas, l'intérieur des fichiers générés sont pareils que les modèles, aucun remplacement d'effectué quoi en gros.

Message édité par: Corentin, à: 12/06/18 10:32
  | | L'administrateur a désactivé l'accés public en écriture.
Corentin
Utilisateur

PowerShelleur Débutant
Messages: 27
graphgraph
Karma: 0  
Re:Problème de boucle - 12/06/18 12:53 Problème résolu je vous partage mon code pour ceux que ça peut aider

Code:

 $FichierCSV Import-Csv -Path "C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv" -Delimiter ";" $CompteurFichierPPPOE=0 $CompteurFichierFO=0 $compteur=0 $FichierCSV | ForEach {$_.MAC_FW $_.MAC_FW.replace(":","-")} $FichierCSV where {$_.NOM_ECOLE -ne ""} | ForEach {     $ligne $_          if ($ligne.PPPOE_USERNAME -ne "" -and $ligne.PPPOE_USERNAME -ne $null){         $Modele Get-Content "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-PPPOE.clish"         $CompteurFichierPPPOE++     }     else {         $Modele Get-Content "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-FO.clish"         $CompteurFichierFO++     }          ForEach-Object {     $FichierModifié $Modele -replace "<NOM_ECOLE>"$ligne.NOM_ECOLE -replace "<ADDR_FW_LAN>"$ligne.ADDR_FW_LAN -replace "<ADDR_POOL_DHCP_LAN>"$ligne.ADDR_POOL_DHCP_LAN  -replace "<ADDR_FW_WAN>"$ligne.ADDR_FW_WAN -replace "<ADDR_MASK_WAN>"$ligne.ADDR_MASK_WAN -replace "<ADDR_GW_WAN>"$ligne.ADDR_GW_WAN -replace "<MAC_FW>"$ligne.MAC_FW -replace "<PPPOE_USERNAME>"$ligne.PPPOE_USERNAME -replace "<PPPOE_PASSWORD>"$ligne.PPPOE_PASSWORD}     Set-Content -Path "C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.$($_.MAC_FW).clish" -Value $FichierModifié     $compteur++ } echo "Le programme a généré $compteur fichiers avec succés" echo "$CompteurFichierPPPOE fichiers PPPOE et $CompteurFichierFO fichiers FO"

  | | L'administrateur a désactivé l'accés public en écriture.
<< Début < Précédente 1 2 Suivante > Fin >>
© 2018 PowerShell-Scripting.com