IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Moniteur réseau avec PowerShell


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut Moniteur réseau avec PowerShell
    Bonjour à tous,

    Totalement débutant dans l'utilisation de PowerShell, j'ai besoin de votre aide et de vos compétences pour me sortir d'une situation difficile.

    Je souhaiterais surveiller le trafic réseau de mon petit parc informatique en utilisant PowerShell. Je ne veux pas savoir où les gens vont naviguer mais simplement connaître le débit montant et descendant de chaque machine et incrémenter une petite BDD pour surveiller l'utilisation de ma bande passante machine par machine.

    J'ai cherché sur Google et suis tombé sur un sujet plutôt intéressant mais je n'ai pas trouvé la documentation nécessaire. Vraisemblablement, je dois m'intéresser à la classe "Win32_NetworkAdapterConfiguration" via la commande "Get-WmiObject -Class Win32_NetworkAdapterConfiguration" mais cela me liste l'ensemble de mes cartes réseaux et me donne la configuration IP.

    Merci d'avance de vos réponses.

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    la classe que tu cites ne fait que donner des informations sur un objet, pas sur son usage.

    De prime abord, n'ayant jamais implémenter cela, je regarderais du côté des compteurs de performances.
    A voir toutefois si cela ne va pénaliser les perf des machines auditées...

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2018
    Messages : 43
    Points : 46
    Points
    46
    Par défaut
    Salut,

    Compliqué en POSH, enfin ça va prendre du temps à mettre en place pour quelque chose qui ne sera pas performant.
    Je m'explique:
    Il y a de très grandes chances pour que tu ais besoin de passer par un Invoke-Command à lancer sur le poste distant tel que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invoke-Command -Computer PCDistant -ScriptBlock{Get-NetAdapterStatistics}
    Mais ça, c'est tout de même assez lent et ça va requêter de l'authentification à chaque fois (Invoke-Command te demandera sûrement de te connecter). Il y a aussi des chances pour que tu ais besoin de paramétrer l'execution de script Powershell sur tes machines cibles, soit par GPO soit à la mano.

    Ou alors peut-être qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invoke-Command -Computer PCDistant -ScriptBlock{powershell.exe -ExecutionPolicy ByPass -Command "& {Get-NetAdapterStatistics}"}
    A tester déjà

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Haaa... Merci de ta réponse. Ta solution est très intéressante. Je vais retourner le problème dans l'autre sens en exécutant en tache de fond un script POSH qui uploadera dans une BDD les taux de connexion. J'arriverai ainsi à avoir un suivi stats de la consommation de ma bande passante par tranche de 5 minutes sur chaque poste.

    Toutefois, comment puis-je récupérer les valeurs de la commande "Get-NetAdapterStatistics" dans une variable. Mes connaissances en POSH sont très limités.

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2018
    Messages : 43
    Points : 46
    Points
    46
    Par défaut
    Salut,

    Pour exploiter ton résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $varStats= Invoke-Command....
    Si tu affiches $varStats, notes l'entête des colonnes pour savoir quoi demander.
    Exemple:
    $varStats.Download te donnera la valeur de la colonne Download. Je n'ai pas de PC sous la main je pense que Download n'existe pas mais c'est pour le principe

    +

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    J'ai réussi à exploiter La commande Get-NetAdapterStatistics. Le problème c'est que les variables ReceivedBytes et SentBytes s'incrémentent. Il s'agit donc de la quantité de donnée reçu. Ce n'est pas ce que je recherche. Je souhaiterais connaître le débit entrant et sortant de ma carte ethernet à un instant T.

    Quelqu'un à une idée de la commande ?

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Non, tu ne souhaite pas connaître le débit entrant et sortant de ta carte ethernet à un instant T.
    Ce débit peux évoluer toutes les millisecondes et tu ne va pas requêter à cette fréquence ou + ou -

    Tu fait une prise de mesure toutes les 10 secondes, par exemple, et tu calcul le delta qui sera ton débit moyen d'envoi et réception sur cette période.
    Tu pourra exprimer ton débit moyen comme tu l'entant même si je choisirai des mégaoctets par secondes par défaut.

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Effectivement, c'est ce que je souhaiterais faire à une intervalle de 5 minutes.

    J'ai trouvé cette classe qui apparemment contiendrait les données qui m'intéresse. Ne me reste plus qu'à trouver comment l'exploiter.

    Toutefois, j'ai peur que l'exécution de ce script toutes les 5 minutes par exemple consomme de la ressource sur mes machines.

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Il bien il faut voir.

    Vaut il mieux lancer un script toutes les 5 minutes ou vaut il mieux qu'il soit résident et qu'il décide lui même de faire le nécessaire toutes les 5 minutes.
    Le lancement d'un script (même vide) consomme aussi des ressources.

  10. #10
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2018
    Messages : 43
    Points : 46
    Points
    46
    Par défaut
    Je te conseille plutôt d'utiliser un outil de monitoring qui utilisera le SNMP et sera moins gourmand qu'un script et plus pratique.
    Par exemple Spicework, gratuit mais il en existe d'autres:
    https://www.spiceworks.com/free-netw...ment-software/

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Concrètement, c'est ce genre d'outil que je cherche avec la contrainte que mes machines se trouve derrière un proxy qui interdit l'accès à internet en dehors des sites autorisés par la boîte et le directeur est catégorique... Pas d'ajout de site en dehors de ceux qu'il a autorisé. Même pour faire du monitoring...

    Alors si quelqu'un connait un outil similaire sans avoir besoin de se connecter au net... Je suis preneur car je m'arrache les cheveux avec mon script.

  12. #12
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici un petit code sans prétention qui fait ce que tu attend.
    N'ayant pas "Get-NetAdapterStatistics" sur Windows 7, je m'appuie sur le Framework .Net

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    # Boucle infinie
    while($true)
    {
        # Récupère la première interface réseau "Ethernet" et "connecté"
        $nic = ([System.Net.NetworkInformation.Networkinterface]::GetAllNetworkInterfaces()) | Where-Object {$_.NetworkInterfaceType -eq [System.Net.NetworkInformation.NetworkInterfaceType]::Ethernet -and $_.OperationalStatus -eq [System.Net.NetworkInformation.OperationalStatus]::Up} | Select-Object -First 1
     
        # Si carte réseau trouvé
        if($nic -ne $null)
        {
            # Récupère les informations
            $nicIdNew = $nic.id
            $ipstatNew = $nic.GetIPStatistics()
            $dateNew = Get-Date
     
            # Vérifie si on peux calculer le débit entre la précédente mesure et la nouvelle : Même carte réseau, données présentent
            if ($ipstatOld -ne $null -and $ipstatNew -ne $null -and $nicIdOld -eq $nicIdNew)
            {
                # Définit le ratio pour calculer en Octets/seconde
                $ratio = 1000 / ($dateNew - $dateOld).TotalMilliseconds
     
                # Récupère et calcul les données à afficher
                $InterfaceName = $nic.Name
                $DateShow = $dateNew.ToString()
                [int64]$sent = ($ipstatNew.BytesSent - $ipstatOld.BytesSent) * $ratio
                [int64]$received = ($ipstatNew.BytesReceived - $ipstatOld.BytesReceived) * $ratio
     
                # affiche le résultat
                Write-Host "$InterfaceName`n  Date : `t`t$DateShow`n  Envoyés : `t$sent Octets/seconde`n  Reçus : `t`t$received Octets/seconde`n`n"
     
            }
     
     
        }
        # Si pas de carte réseau trouvé on force les informations à null
        else
        {
            $nicIdNew = $null
            $ipstatNew = $null
            $dateNew = $null
        }
     
        # Les nouvelles données deviennes les anciennes
        $nicIdOld = $nicIdNew
        $ipstatOld = $ipstatNew
        $dateOld = $dateNew
     
        # Attend 5 secondes
        Start-Sleep -Seconds 5
    }

Discussions similaires

  1. Mise en réseau avec deux fichiers *.mdb
    Par Rouge_XIII dans le forum Access
    Réponses: 6
    Dernier message: 08/12/2005, 19h09
  2. Copy de fichier sur réseau avec mot de passe
    Par Guile dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 07/10/2005, 15h45
  3. Modem ADSL sur ordinateur en réseau avec routeur
    Par francis m dans le forum Dépannage et Assistance
    Réponses: 7
    Dernier message: 01/05/2005, 00h53
  4. Réponses: 3
    Dernier message: 09/11/2004, 10h44
  5. Probleme de réseau avec aol
    Par Mut dans le forum Développement
    Réponses: 22
    Dernier message: 26/05/2003, 23h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo