Flash info

Prenez une longueur d'avance avec PowerShell. Faire ce choix c'est anticiper l'avenir des produits Microsoft mais aussi être plus performant dans son travail quotidien d'admin système.

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

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

Administrateur
Messages: 1213
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: 29
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: 1213
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: 29
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: 1213
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: 29
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: 29
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