Question Extraire les 3 premiers blocs d'une adresse IP

Plus d'informations
il y a 9 ans 1 mois #23068 par Marc
Bonjour a tous,
perso je ne maitrise pas suffisamment le dotnet.
Du coup j'aurais fais comme ça.

[code:1]
$ips = Import-Csv \"c:\temp\adresse_ip.csv\" -UseCulture #<- Je récupère mes IP
$ips|foreach{
#<- Dans cette variable je stock mon ip transformé
$a=\"\"

#<- Je split mon ip et récupère les 3 premiers digit
$_.AdresseIP.Split(\".\"«»)[0..2]|foreach{

#<- Je les réassemble et y rajoute le dernier .
$a+=$_ + \".\"
}
Write-Host $a
}
10.210.60.
10.220.105.
10.230.177.
10.240.117.
10.250.218.
[/code:1]

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

Plus d'informations
il y a 9 ans 1 mois #23070 par Philippe
salut à tous

une autre approche en expressions régulières :

[code:1]$csvfile = \"C:\Powershell\A*.csv\"

$listeIP = Import-CSV $csvfile -Delimiter \";\"

Foreach ($ip in $listeIP) {
$NewIP = ($ip.\"Adresse IP\" -split \"^(\d{1,3}\.\d{1,3}\.\d{1,3})\"«»)[1]
Write-host $NewIP
}
[/code:1]

les techniques pour avoir un résultat ne manque pas
seul impératif connaître les données et leurs formats
.

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

Plus d'informations
il y a 9 ans 1 mois #23072 par Vega
Excellent Marcci, merci. Ça fonctionne très bien.
Je souhaiterais bien aboutir aussi la méthode de Laurent, même si plus le temps passe moins je crois que je vais y arriver. C'est un véritable casse-tête pour se mettre à niveau.

J'avance par étape, maintenant que le plus dur est fait, je positionne ma colonne adresse IP entre deux autres colonnes, dans un fichier CSV.

Fichier CSV : specimen.csv (séparateur \";\")
Quand je l'édite, j'ai le contenu suivant :
[code:1]
Numéro de série;Adresse IP;Dernière mise à jour
AZ12345;10.201.174.39;2017-02-01 09:00:10
AZ67890;10.201.104.37;2016-06-28 10:10:41
AZ23456;10.201.67.47;2017-02-01 09:00:23
AZ78901;10.201.167.80;2017-02-01 08:50:31
AZ23498;10.201.212.47;2016-06-14 13:56:51
[/code:1]

L'idée, c'est de modifier la colonne \"Adresse IP\" en récupérant les 3 premiers blocs, comme on vient de faire, puis d'exporter le fichier modifié dans un nouveau fichier.

Voici mon code actuel :
[code:1]
$ips = Import-CSV \"C:\Powershell\Sp*.csv\" -UseCulture

$ips | foreach {
$a=\"\"
$_.\"Adresse IP\".Split(\".\"«»)[0..2]|foreach {
$a+=$_ + \".\"
}
$ips
#Write-Host $a

} | Export-Csv C:\Powershell\Fichier_OK.csv -NoTypeInformation
[/code:1]

Ce qui me donne en sorti :
[code:1]
\"Num?ro de s?rie\",\"Adresse IP\",\"Derni?re mise ? jour\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
[/code:1]

Pas très glorieux, ça boucle 5 fois, comme le nombre d'enregistrement dans mon fichier. un léger détail doit m'échapper :blink:

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

Plus d'informations
il y a 9 ans 1 mois #23073 par Vega
Merci beaucoup 6ratgus, en effet je vois avec vous 3 qu'il y a de nombreuses approches différentes.
Si tu as du temps à perdre (la blague...) je te laisse lire mon dernier message. En attendant, je me remets aux recherches! Merci!

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

Plus d'informations
il y a 9 ans 1 mois #23076 par Philippe
tu a de la chance j'ai du temps \"à perdre\" :)
environ 5 mns :evil:

d'abord les erreurs de codage :

sur l'import, perso j'ai du rajouter \"-Encoding UTF7\" pour ne pas avoir de problème d'accent
mais tu n'a peut être pas le problème !

sur cette partie de ligne de code \"$_.\"Adresse IP\".Split(\".\")[0..2]\"
tu a trouvé l'astuce pour les nom de colonne avec des espaces, c'est une bonne chose B)
a toi de voir quelle solution tu utilise pour la transformation de adresse IP, on t'a donnée plusieurs methodes, tu est maitre de ce choix

pour le fait que tu ai 5 fois la même chose dans le fichier destination.
le pourquoi : parce que tu a mis dans ta boucle principale \"$ips\" qui contient tout ton fichier source
ton fichier contient 5 lignes donc tu va avoir 5 fois tout ton fichier source dans l'export !!! :evil:
je pense que tu doit supprimé cette ligne !!!

pour la solution de ce problème, tu doit voir \"$ips\" comme un object de type tableau (ici tableau de chaine de caractère) un peu comme un tableau excel
tu doit changer le contenue d'une cellule d'une ligne
dans ton cas dans une boucle ça s'écrit :
$_.'Adresse IP' = la nouvelle ip

le reste est bon donc a toi de jouer !!! :)<br><br>Message édité par: 6ratgus, à: 2/02/17 17:41

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

Plus d'informations
il y a 9 ans 1 mois #23077 par Vega
Merci d'avoir pris le temps d'expliquer.
Je suis dessus là, mais je n'arrive pas à parcourir mon tableau ($ips) si je l'enlève au début, j'ai des erreurs d'exécution.

J'aurais bien vu un truc dans le genre :
[code:1]
$ips = Import-CSV \&quot;C:\Powershell\Sp*.csv\&quot; -UseCulture

#$ip |

foreach ($ip in $ips) {

$a=\&quot;\&quot;
$_.\&quot;Adresse IP\&quot;.Split(\&quot;.\&quot;«»)[0..2] | foreach {
$a+=$_ + \&quot;.\&quot;
}

Write-Host $a

}

$ips | Export-Csv C:\Powershell\Fichier_OK.csv -NoTypeInformation
[/code:1]

Mais ça ne reconnait pas mon \&quot;foreach\&quot; je ne comprends pas pourquoi. Et ça me renvoit une erreur :
[code:1]
PS C:\Users\5931517&gt; C:\Powershell\Print.ps1
Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
Au niveau de C:\Powershell\Print.ps1 : 8 Caractère : 33
+ $_.\&quot;Adresse IP\&quot;.Split &lt;&lt;&lt;&lt; (\&quot;.\&quot;«»)[0..2] | foreach {
+ CategoryInfo : InvalidOperation: (Split:«»String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
[/code:1]

Je dois rentrer je continuerai chez moi ce soir... Par contre je n'ai pas l'impression d'être presque au bout là!!! A suivre :)
:dry: :S

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

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