Question
Extraire les 3 premiers blocs d'une adresse IP
- Vega
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Je suis débutant en Powershell. Après une journée de prise de tête où je souhaitais absolument trouver la solution par moi-même, je suis obligé de me résoudre à demander de l'aide...
La version simplifié de ce que je souhaite faire c'est : extraire les 3 premiers blocs d'une adresse IP, quel que soit le nombre de digits entre chaque point, en gardant le derniers point.
Exemple pour l'adresse IP \"192.168.1.100\", je souhaite avoir en résultat \"192.168.1.\"
Le mieux que j'ai réussi à avoir ce sont les 3 premiers blocs mais sans les . Voici mon code, qui est sans doute à modifier entièrement :
[code:1]
$a='192.168.1.100'
foreach ($ip in $a) {
#$split = $ip.split(\".\"«»)
[string]$split[0..($Split.count-2)]
}
[/code:1]
Le résultat est :
PS C:\Powershell> C:\Powershell\Adresse IP.ps1
192 168 1
Merci aux experts pour votre aide.
Je détaillerai ensuite plus précisément l'environnement dans lequel se trouve l'adresse IP.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
une solution
[code:1]
#On type l'adresse
[ipAddress]$a='192.168.1.100'
#Get-Help about_Automatic_Variables|More
$ofs='.'
#Split + énumération + convert string +$OFS
\"$(($a.GetAddressBytes())[0..2])\"
192.168.1
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 1/02/17 22:45
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vega
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Un grand merci! Ca fonctionne! Je ne sais pas comment tu as pu trouver ça, même en relisant le code ça ne me parle pas.
J'ai dû rajouter
dans la dernière ligne pour avoir le dernier point dans l'adresse IP, c'est tout bon maintenant.+ \" \"
[code:1]\"$(($a.GetAddressBytes())[0..2] + \" \"«»)\"[/code:1]
Résultat :
192.168.1.
Je continue mon cheminement en dévoilant la suite de ce que j'essaye de faire. Mes adresses IP se trouvent dans un fichier CSV ayant en entête \"Adresse IP\" :
[code:1]
Adresse IP
10.210.60.39
10.220.105.50
10.230.177.47
10.240.117.80
10.250.218.47
[/code:1]
J'arrive à importer le CSV et à le lister, par contre l'intégration de ton code ne passe pas, et je n'arrive pas à trouver pourquoi :
[code:1]
$csvfile = \"C:\Powershell\A*.csv\"
Import-CSV $csvfile -Delimiter \";\"
Foreach ($ip in $csvfile) {
$ofs='.'
$NewIP=\"$(($_.GetAddressBytes())[0..2] + \" \"«»)\"
}
Write-host $NewIP
[/code:1]
Pour parcourir tous les enregistrements, j'ai transformé la ligne
en\"$(($a.GetAddressBytes())[0..2] + \" \")\"
\"$(($_.GetAddressBytes())[0..2] + \" \")\"
Ca me donne l'erreur suivante :
[code:1]
PS C:\Powershell> C:\Powershell\Print.ps1
Adresse IP
10.210.60.39
10.220.105.50
10.230.177.47
10.240.117.80
10.250.218.47
Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
Au niveau de C:\Powershell\Print.ps1 : 7 Caractère : 20
+ ($_.GetAddressBytes <<<< ())[0..2] + \" \"
+ CategoryInfo : InvalidOperation: (GetAddressBytes:«»String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
[/code:1]
Je cherche en parallèle, sans résultat cette matinée pour le moment.
Je vous remercie pour votre aide.
Connexion ou Créer un compte pour participer à la conversation.
- Vega
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Un grand merci! Ca fonctionne! Je ne sais pas comment tu as pu trouver ça, même en relisant le code ça ne me parle pas.
J'ai dû rajouter
dans la dernière ligne pour avoir le dernier point dans l'adresse IP, c'est tout bon maintenant.+ \" \"
[code:1]\"$(($a.GetAddressBytes())[0..2] + \" \"«»)\"[/code:1]
Résultat :
192.168.1.
Je continue mon cheminement en dévoilant la suite de ce que j'essaye de faire. Mes adresses IP se trouvent dans un fichier CSV ayant en entête \"Adresse IP\" :
[code:1]
Adresse IP
10.210.60.39
10.220.105.50
10.230.177.47
10.240.117.80
10.250.218.47
[/code:1]
J'arrive à importer le CSV et à le lister, par contre l'intégration de ton code ne passe pas, et je n'arrive pas à trouver pourquoi :
[code:1]
$csvfile = \"C:\Powershell\A*.csv\"
Import-CSV $csvfile -Delimiter \";\"
Foreach ($ip in $csvfile) {
$ofs='.'
$NewIP=\"$(($_.GetAddressBytes())[0..2] + \" \"«»)\"
}
Write-host $NewIP
[/code:1]
Pour parcourir tous les enregistrements, j'ai transformé la ligne
en\"$(($a.GetAddressBytes())[0..2] + \" \")\"
\"$(($_.GetAddressBytes())[0..2] + \" \")\"
Ca me donne l'erreur suivante :
[code:1]
PS C:\Powershell> C:\Powershell\Print.ps1
Adresse IP
10.210.60.39
10.220.105.50
10.230.177.47
10.240.117.80
10.250.218.47
Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
Au niveau de C:\Powershell\Print.ps1 : 7 Caractère : 20
+ ($_.GetAddressBytes <<<< ())[0..2] + \" \"
+ CategoryInfo : InvalidOperation: (GetAddressBytes:«»String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
[/code:1]
Je cherche en parallèle, sans résultat cette matinée pour le moment.
Je vous remercie pour votre aide.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Powersehll est basé sur la framework dotnet, il faut regarder/chercher les classes qui peuvent aider dans les tâches d'infra.Je ne sais pas comment tu as pu trouver ça
Ensuite ce n'est qu'un assemblage de comportements de PS. Je pourrais de le décomposer en + lignes, une par étape.
Vega écrit:
Peut être en lisant les commentairesJ'arrive à importer le CSV et à le lister, par contre l'intégration de ton code ne passe pas, et je n'arrive pas à trouver pourquoi :
[code:1]
#On type l'adresse
[ipAddress]$a='192.168.1.100'
[/code:1]
Sinon import-csv renvoit de objets de type string et/ou ayant des propriétés de type string/scalaire.
Il faut typer ton objet afin d'utiliser les méthodes de la classe ciblée.
Là ce n'est plus le framework mais un principe de base de la programmation orienté objet.
Dans ton cas on sait par le nom de la colonne du csv que c'est une adresse Ip, mais PS n'en sait rien, faut l'aider
Le typage permet également de connaitre les ligne du csv en erreur, il faut donc prévoir une gestion d'exception: Ceinture/Bretelle/Parachute.
Je te propose de créer une fonction ConvertTo-MyIpAddress qui transforme ton info de départ dans le format voulu, ce qui faciliteras la lecture du code.
Et $Ofs étant de portée locale sa déclaration n'affectera pas le code appelant.
Et l'erreur indiquée découle de l'absence de typage, bien que ceci soit plus mieux :
[code:1]
Foreach ($ip in Import-CSV $csvfile -Delimiter \";\"«»)
[/code:1]
Sinon tu itéres sur $csvfile qui est une string, c'est à dire un tableau de [char]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vega
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Extraire les 3 premiers blocs d'une adresse IP