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 :

Indexation impossible dans un tableau [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Skyxia
    Homme Profil pro
    Ingénieur réseau & sécurité
    Inscrit en
    Mai 2016
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur réseau & sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2016
    Messages : 359
    Billets dans le blog
    3
    Par défaut Indexation impossible dans un tableau


    Je débute en PowerShell, et donc pour ne pas commencer trop compliqué j'ai voulu écrire un petit script qui me ressortait des informations utiles concernant des PC/Serveurs que je possède.
    Mon script fonctionne, mais s'affiche une erreur que je ne comprend pas totalement.

    Voici tout d'abord le code :

    Code : 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
    get-content C:\Users\TEST\Documents\Script\Audit\List1.txt |
     `
    foreach {
    if (test-connection $_ -quiet -count 1)
    {
        $model = get-wmiObject Win32_ComputerSystem -comp $_ ;
        $uint32 = get-wmiObject Win32_ComputerSystem -comp $_ ;         
        $os = get-wmiobject Win32_OperatingSystem -comp $_ ;
        $idate = get-wmiobject Win32_OperatingSystem -comp $_ ;
        $serial = get-wmiobject Win32_OperatingSystem -comp $_ ;
        $mac = gwmi win32_networkadapter -comp $_ | ? {$_.macaddress};
        $ip = get-WmiObject Win32_NetworkAdapterConfiguration -comp $_ | Where {$_.Ipaddress.length -gt 1};
        $ipsubnet = get-WmiObject Win32_NetworkAdapterConfiguration -comp $_ | Where {$_.IpSubnet.length -gt 1};
        $domain = get-wmiObject Win32_ComputerSystem -comp $_ ;
        $maxspeed = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Speed -ne $null}
        $Gateway = Get-WmiObject Win32_NetworkAdapterConfiguration | ? {$_.DefaultIPGateway}
       
        $result = New-object PSObject
        $result | Add-member NoteProperty Nom $model.name
        $result | Add-member NoteProperty Modèle $model.model
        $result | Add-member NoteProperty Fabricant $model.manufacturer
        $result | Add-member NoteProperty Mémoire ([math]::round($model.totalphysicalmemory/1GB))
        $result | Add-member NoteProperty Processors $uint32.numberofprocessors
        $result | Add-member NoteProperty OS $os.caption
        $result | Add-member NoteProperty IDate ([System.Management.ManagementDateTimeConverter]::ToDateTime($idate.installdate))
        $result | Add-member NoteProperty Serial $serial.serialnumber
        $result | Add-member Noteproperty Mac $mac.macaddress
        $result | Add-member Noteproperty IP $ip.ipaddress[0]
        $result | Add-member Noteproperty IPSubnet $ipsubnet.IpSubnet[0]
        $result | Add-member Noteproperty Domain $domain.Domain
        $result | Add-member Noteproperty MaxSpeed $maxspeed.Speed
        $result | Add-Member Noteproperty Gateway $Gateway.DefaultIPGateway
        
    
        $result >> C:\Users\TEST\Documents\Script\Audit\results.txt
    
    }
    
    else
    
        {Write-host "$_ ne répond pas"}
    
    }

    (Il est sûrement dégueulasse mais veuillez m'en excuser je n'ai pas encore regarder comment bien ranger tout ça promis je le ferais )


    Donc, lorsque je le lance, dans mon "results.txt" j'obtiens mes résultats sous cette forme là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Nom        : 01SVISIO-PROD1
    Modèle     : PowerEdge 1950
    Fabricant  : Dell Inc.
    Mémoire    : 8
    Processors : 2
    OS         : Microsoft Windows Server 2008 R2 Standard 
    IDate      : 30/01/2014 08:53:13
    Serial     : 55041-266-0082486-*****
    Mac        : {00:22:19:57:75:0A, 20:41:53:59:4E:FF}
    IP         : 10.1.**.**
    IPSubnet   : 255.255.254.0
    Domain     : test.local
    MaxSpeed   : {100000000, 100000}
    Gateway    : {10.1.10.254}
    (Note : les * sont rajoutés volontairement à l'écriture de ce poste, de même pour le remplacement de "test.local")

    Aucun problème jusque là, mais si je rajoute certains serveurs, voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Indexation impossible dans un tableau Null.
    Au caractère C:\Users\TEST\Documents\Script\Audit\Infos.ps1:28 : 5
    +     $result | Add-member Noteproperty IP $ip.ipaddress[0]
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation : (:) [], RuntimeException
        + FullyQualifiedErrorId : NullArray
     
    Indexation impossible dans un tableau Null.
    Au caractère C:\Users\TEST\Documents\Script\Audit\Infos.ps1:29 : 5
    +     $result | Add-member Noteproperty IPSubnet $ipsubnet.IpSubnet[0]
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation : (:) [], RuntimeException
        + FullyQualifiedErrorId : NullArray
    Donc je ne comprend pas car sur certains serveurs, ça s'affiche correctement et d'autre le champ IP ou IPSubnet n'apparaît pas dans mes résultats

    Merci d'avance pour vos lumières,

    Cordialement.

    Siberattaque : Attaque informatique par un hackeur sibérien.


    Je vous invite à consulter mes billets dans mon blog :
    Cisco IOS & Sécurité basique
    Audit réseaux dans un SI

    [Smartphone] [Android] 8 conseils pour vous sécuriser un minimum !

  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
    Billets dans le blog
    1
    Par défaut
    Salut,
    vérifie en ligne de commande si tu obtiens les informations des serveurs en erreur.
    A priori le pb n'est pas dans le code, mais l'infra (version d'OS, pb de port,...)

    Tu récupères bien les autres informations ?

  3. #3
    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
    Billets dans le blog
    1
    Par défaut
    Vérifie dans win32_networkadapterconfiguration cette propriété :

    IPEnabled


    Data type: booleanAccess type: Read-onlyQualifiers: MappingStrings ("Win32Registry|System\\CurrentControlSet\\Services|Parameters\\Tcpip")

    If TRUE, TCP/IP is bound and enabled on this network adapter.

  4. #4
    Membre chevronné
    Avatar de Skyxia
    Homme Profil pro
    Ingénieur réseau & sécurité
    Inscrit en
    Mai 2016
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur réseau & sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2016
    Messages : 359
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Merci pour tes réponses. Alors allons-y par étapes :

    1.

    vérifie en ligne de commande si tu obtiens les informations des serveurs en erreur.
    J'ai ping le nom d'un des serveurs où il ne pouvait pas récupérer l'IP ou l'IPSubnet et, j'obtiens bien l'adresse IP de ce serveur.
    Pour être totalement sûr, je me suis connecté à distance sur ce serveur, dans les propriétés IPv4, je retrouve bien l'adresse IP, le Subnet.

    En ce qui concerne les autres informations, Gateway, domain, OS, RAM aucun soucis à ce niveau là.

    2.

    J'ai étais vérifier la propriété que vous m'avez indiqué, et j'ai donc rajouter ceci dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ipenable = get-wmiobject win32_networkadapterconfiguration -comp $_ | Where {$_.IPenabled -eq "True"}
    ainsi que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result | Add-member Noteproperty IPEnable $ipenable.IPenabled
    Et, dans mon fichier results.txt voici le retour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Nom        : 01SLSPM-PROD1
    Modèle     : ProLiant BL460c Gen8
    Fabricant  : HP
    Mémoire    : 16
    Processors : 2
    OS         : Microsoft Windows Server 2008 R2 Standard 
    IDate      : 14/01/2014 20:58:28
    Serial     : 00477-001-0000421-*****
    Mac        : {20:41:53:59:4E:FF, F0:92:1C:01:98:38}
    IPEnable   : True
    Domain     : test.local
    MaxSpeed   : {100000000, 100000}
    Gateway    : {10.1.10.254}
    Est-ce que l'ajout que j'ai effectué est bon niveau paramètre pour la commande IPenabled ? Cela reste très étrange pour moi malgré tout

    Merci d'avance,

    Cordialement.

    Siberattaque : Attaque informatique par un hackeur sibérien.


    Je vous invite à consulter mes billets dans mon blog :
    Cisco IOS & Sécurité basique
    Audit réseaux dans un SI

    [Smartphone] [Android] 8 conseils pour vous sécuriser un minimum !

  5. #5
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Skyxia Voir le message
    Est-ce que l'ajout que j'ai effectué est bon niveau paramètre pour la commande IPenabled ?
    Oui.
    Ceci dit ton code d'origine suppose que la première interface renvoyée par win32_networkadapterconfiguration possède une ip et que dans ton cas : une machine à une et une seule IP.

  6. #6
    Membre chevronné
    Avatar de Skyxia
    Homme Profil pro
    Ingénieur réseau & sécurité
    Inscrit en
    Mai 2016
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur réseau & sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2016
    Messages : 359
    Billets dans le blog
    3
    Par défaut
    D'accord je vois merci ! Effectivement là est le problème, certaines machines ne possèdent pas qu'une seule IP pourquoi n'y ai-je pas pensé avant
    Du coup voilà tout simplement les modifications effectuées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ip = get-WmiObject Win32_NetworkAdapterConfiguration -comp $_ | Where {$_.Ipaddress};
    $ipsubnet = get-WmiObject Win32_NetworkAdapterConfiguration -comp $_ | Where {$_.IpSubnet};
    J'ai enlevé la partie qui stipule que je n'ai qu'une seul IP avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$_.Ipaddress.length -gt 1};
    Néanmoins, même si je récupère bien toutes les informations (sans erreurs maintenant) une dernière petite question avant le résolu :

    Voici ce que je récupère sur certains serveurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Nom        : 01SLSGTF-PROD3
    Modèle     : ProLiant BL460c Gen8
    Fabricant  : HP
    Mémoire    : 16
    Processors : 2
    OS         : Microsoft Windows Server 2008 R2 Standard 
    IDate      : 08/11/2013 19:10:37
    Serial     : 00477-001-0000421-*****
    Mac        : {20:41:53:59:4E:FF, F0:92:1C:01:86:20, F0:92:1C:01:86:24}
    IP         : {10.1.50.**, fe80::dc32:cfad:8e3a:4a**, 10.1.58.**, fe80::4cba:be73:79f9:69**}
    IPSubnet   : {255.255.254.0, 64, 255.255.254.0, 64}
    Domain     : test.local
    MaxSpeed   : {100000000, 100000}
    Gateway    : {10.1.10.254}
    Pourquoi (en rouge) ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IP: {10.1.50.**, fe80::dc32:cfad:8e3a:4a**, 10.1.58.**, fe80::4cba:be73:79f9:69**}
    IPSubnet: {255.255.254.0, 64, 255.255.254.0, 64}
    Merci beaucoup

    Siberattaque : Attaque informatique par un hackeur sibérien.


    Je vous invite à consulter mes billets dans mon blog :
    Cisco IOS & Sécurité basique
    Audit réseaux dans un SI

    [Smartphone] [Android] 8 conseils pour vous sécuriser un minimum !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. indexation linéaire dans un tableau à n dimensions
    Par marion5515 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 26/02/2009, 16h58
  2. [VBA] Obtenir l'index dans un tableau à partir de sa valeur.
    Par Julien Dufour dans le forum Access
    Réponses: 2
    Dernier message: 28/07/2006, 11h03
  3. Réponses: 9
    Dernier message: 12/05/2006, 09h06
  4. [Tableaux] sondage impossible à mettre dans un tableau...
    Par BlackTiger dans le forum Langage
    Réponses: 11
    Dernier message: 17/11/2005, 13h45
  5. [Struts] Index de ligne dans 1 tableau
    Par javaSudOuest dans le forum Struts 1
    Réponses: 9
    Dernier message: 20/10/2005, 09h52

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