Powershell - Tri d'adresse IP
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Powershell - Tri d'adresse IP



  1. #1
    inviteb6692174

    Powershell - Tri d'adresse IP


    ------

    Bonjour,

    Je souhaite réalisé un code me permettant de récupérer et ensuite de trier des adresses IP à partir d'un nom de machine.
    Actuellement mon code est capable de lire un fichier nommé "listeposte.txt" ou sont inscrit les noms des PC dont les adresses IP doivent être récupérer.
    Il range ensuite ces IP dans un autre fichier nommé "adresseposte.txt" (lorsqu'il trouve l'IP associé au nom d'hôte).
    Si le nom d'hôte n'est associé à aucune IP, ils les placent alors dans un troisième et dernier fichier "erreur.txt".

    Résumé de la situation :

    Voici ce qui apparaît dans mon fichier adresseposte.txt :

    "NOM MACHINE 1"/"ADRESSE MAC ICI"/169.254.130.203
    "NOM MACHINE 1"/"ADRESSE MAC ICI"/192.168.1.11
    "NOM MACHINE 2"/"ADRESSE MAC ICI"/169.254.130.203
    "NOM MACHINE 2"/"ADRESSE MAC ICI"/192.168.1.11


    Je souhaiterai maintenant avoir le même résultat mais avec les IP trier par ordre croissant.
    De 1.1.1.1
    1.1.1.2
    1.1.2.1
    à 1.3.1.1
    ect...

    VOICE MON CODE :

    Code:
    $fichierPoste="C:\Users\***\Desktop\Logiciel BTS\Powershell\temp\listeposte.txt"
    $fichierAdresse="C:\Users\***\Desktop\Logiciel BTS\Powershell\temp\adresseposte.txt"
    $fichierErreur="C:\Users\***\Desktop\Logiciel BTS\Powershell\temp\erreur.txt"
    #On enregistre le contenu du fichier "fichierPoste" dans la variable listePoste
    $listePoste=Get-Content $fichierPoste 
    
    
    foreach($nom in $listePoste) 
    {
        #A l'aide de la variable filtre on ajoute derniere address le nom du poste
        $filtre="address='"+$nom+"'"
        #La prochaine ligne permet de faire un test de connexion vers le poste
        #avec un filtre construit à partir du nom.
        $test=Get-WmiObject Win32_PingStatus -Filter $filtre
            if ($test.StatusCode -eq 0) {
                #Retourne une collection d'objets du poste spécifié par -ComputerName
                $colCarte=Get-WmiObject Win32_NetworkAdapterConfiguration -Filter IPEnabled=True -ComputerName $nom | sort-object Ipaddress
                foreach($carte in $colCarte) {
                    #Pour chaque configuration retournée, écriture d'une ligne dans le fichier
                    #On écrit sur chaqu ligne le nom, l'adresse MAC et l'ip séparer par un /
                    $ligne=$nom+"/"+$carte.MACAddress+"/"+$carte.IPAddress 
                    Add-Content $fichierAdresse $ligne
                    
                    
                    
                    
                                             }
                                        }
            #Si le test de connexion vers le poste a échouée on écrit dans le fichier erreur "pas trouvé le poste :" avec le nom du poste
            else{
                    Add-Content $fichierErreur "pas trouvé le poste : $nom"
                }
    }
    Voila ! Si quelqu'un peut m'aider rapidement svp.
    Je vous remercie.

    -----
    Dernière modification par Jack ; 29/04/2016 à 23h39. Motif: balises code

  2. #2
    Jack
    Modérateur

    Re : Powershell - Tri d'adresse IP

    Merci de prendre la peine de lire les règles participatives de ce forum avant de poster

  3. #3
    invite3498e9a5

    Re : Powershell - Tri d'adresse IP

    Le caractère "." ayant pour code asciii 46 et le "1" ayant 49,
    je pense qu'un tri alphabétique sur l'@IP doit les fournir directement: "11" est plus grand que "1." donc 11.1.1.1 sera plus grand que 1.2.3.99

    Question: sais-tu écrire un algorithme de tri?

  4. #4
    invite3498e9a5

    Re : Powershell - Tri d'adresse IP

    Autre solution:
    Tu transformes tes @IP en chaine de caractère de 12 chiffres, les chiffres étant les composants de l'@IP complétée à gauche avec des "0"
    exemple: 12.4.1.232 -> 012004001232
    et tu fais un tri alphabétique tout bête
    Il ne te restes plus qu'à retransposer tes @IP sous la forme X.Y.Z.U

    un algorithme simple de tri (il y en a des plus optimisés...)

    Supposons que T est la table de tes adresses transformées en chaine de caractères (bornes 0, n):

    Code:
    pour i allant de 0 à n-1
         pour J allant de i+1 à n
              si T(I) > T(J) alors
                   dummy = T(I)
                   T(J)=T(I)
                   T(I)=dummy
              fin si
         fin pour 
    fin pour
    pour transformer tes adresses IP, utiliser une fonction équivalent à la méthode split avec le "." comme délimiteur et prendre les 3 caractères de droite du mot généré par "000" + num, ce qui fournira la chaine num complétée à gauche par zéro à deux "0"

  5. A voir en vidéo sur Futura
  6. #5
    Bluedeep

    Re : Powershell - Tri d'adresse IP

    Citation Envoyé par fregoli Voir le message
    Le caractère "." ayant pour code asciii 46 et le "1" ayant 49,
    je pense qu'un tri alphabétique sur l'@IP doit les fournir directement: "11" est plus grand que "1." donc 11.1.1.1 sera plus grand que 1.2.3.99
    Marche pas : 24.1.2.3 viendra après 198.26.1.1 (par exemple).

  7. #6
    invite3498e9a5

    Re : Powershell - Tri d'adresse IP

    Citation Envoyé par Bluedeep Voir le message
    Marche pas : 24.1.2.3 viendra après 198.26.1.1 (par exemple).
    Deuxième méthode: Si car 24.1.2.3 sera transformé en 024001002003 et 198.26.1.1 en 198026001001

    Utiliser la méthode string.split(".") pour obtenir 4 chaines de caractères, concaténer chaque élément splité avec "000" puis prendre les 3 caractères de droite (substr(ch,len(ch)-2,3) par exemple) et concatener les 4 éléments

  8. #7
    invite3498e9a5

    Re : Powershell - Tri d'adresse IP

    Code pour transformer 1 @IP en chaine complétée avec les "0" qui vont bien

    Code:
    T = IPAadress.split(".")
    C = ""
    pour i allant de 0 à 3
         S = "000" & T(i)
         S = substr(S,len(S)-2,3)
         C = C & S
    fin pour

    Code pour faire l'inverse
    Code:
    IPAdress=str(val(substr(S,1,3))) & "." & str(val(substr(S,4,3))) & "." & str(val(substr(S,7,3))) & "." str(val(substr(S,10,3))) & "."
    avec val: fonction transformant des chaines en integer, et str l'inverse

  9. #8
    inviteb6692174

    Re : Powershell - Tri d'adresse IP

    Je vais essayer tout ça !

    Merci de votre aide.

    Je vous recontacte si besoin oblige !

  10. #9
    inviteb6692174

    Re : Powershell - Tri d'adresse IP

    Premièrement, merci pour votre aide.

    Deuxièmement je débute en powershell j'ai donc essayer de modifier votre code et de l'utiliser mais je ne maîtrise pas assez le powershell.

    J'ai multiplié mes recherches et j'ai essayer la commande suivante : "Get-Content $fichierAdresse | Sort-Object | Get-Unique > $IP"

    Avec cette commande j'arrive bien a classer mes IP mais la remarque par Bluedeep est vrai concernant "Marche pas : 24.1.2.3 viendra après 198.26.1.1 ".

    Je souhaite faire au plus simple. (J'étudie dans le réseau, pas dans la programmation )

    Comment résoudre ce problème sans passer par la conversion en chaîne de caractère ?

    Merci.

  11. #10
    invite3498e9a5

    Re : Powershell - Tri d'adresse IP

    En powershell, je ne sais pas donner une autre manière sauf à convertir les @IP soit en nombre, soit en chaine de caractères.
    Sinon, tu peux, il me semble, en powershell, écrire le tout dans un fichier excel, et tu pourras alors avec excel faire la macro qui ira bien pour ensuite trier tes @IP.

  12. #11
    Bluedeep

    Re : Powershell - Tri d'adresse IP

    Citation Envoyé par vinvin97 Voir le message
    Premièrement, merci pour votre aide.

    Deuxièmement je débute en powershell j'ai donc essayer de modifier votre code et de l'utiliser mais je ne maîtrise pas assez le powershell.

    J'ai multiplié mes recherches et j'ai essayer la commande suivante : "Get-Content $fichierAdresse | Sort-Object | Get-Unique > $IP"

    Avec cette commande j'arrive bien a classer mes IP mais la remarque par Bluedeep est vrai concernant "Marche pas : 24.1.2.3 viendra après 198.26.1.1 ".

    Je souhaite faire au plus simple. (J'étudie dans le réseau, pas dans la programmation )

    Comment résoudre ce problème sans passer par la conversion en chaîne de caractère ?

    Merci.
    Le gros "plus" de powershell est de pouvoir manipuler les classes du framework .NET; donc :
    - tu montes ta liste dans un tableau
    - tu appelle le Sort sur ce tableau en lui passant une fonction personnalisée de comparaison

  13. #12
    inviteb6692174

    Re : Powershell - Tri d'adresse IP

    Le grand jour approche !

    J'ai essayer d'utiliser : $ligne=$carte.IPAddress et de placer cette ligne dans un fichier texte, le problème c'est qu'il me récupère les adresses IP mais aussi les adresses MAC.
    Sous cette forme :

    IP
    MAC
    IP
    MAC


    J'ai essayer avec la méthode du tableau mais je ne comprends pas.
    Avec le fichier que je récupère grâce a la ligne du dessus il doit pourtant être possible de séparer les MAC des IP et de classer tout ceci ....

Discussions similaires

  1. Adresse IP et adresse ipv4
    Par inviteacfd1015 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 08/12/2015, 22h27
  2. Je vous mets l'adresse IP et trouvez l'adresse du propriétaire.
    Par invite2be265cd dans le forum Internet - Réseau - Sécurité générale
    Réponses: 9
    Dernier message: 23/12/2011, 15h31