none
Powershel -> Traitement variables dans boucle foreach RRS feed

  • Question

  • Bonjour,

    Je cherche à récupérer les @ip et nom des pc qui remonte dans mon dhcp a partir des adresses MAC.

    J'ai réalisé le script suivant : 

    $MAC = read-host "Adresse MAC :"
    
    foreach($ligne in $MAC){
    $Platine = Get-DhcpServerv4Scope | Get-DhcpServerv4Lease -EA SilentlyContinue -ClientId $ligne
    Write-Host $Platine.IPAddress $Platine.HostName
    
    }
    
    
    Read-Host "Appuyez sur ENTREE pour continuer..."

    Lorsque je l'execute avec une seule valeur (une seule adresse MAC), pas de probléme. Par contre qaund je cherche à rentrer plusieur adresse MAC, aucune valeur n'est retournée.

    J'ai essayer d'utiliser un tableau pour renseigner mes valeurs, mais sans succés.

    Pouvez-vous m'aider svp ?

    lundi 19 octobre 2020 15:23

Réponses

  • Bonjour,

    comme l'indique Mehdi,

    en remplaçant la ligne actuelle "read-host" par 

    $MAC=get-content .\FichierListeMac.txt

    Tu devrais avoir un fonctionnement correct du script si le fichier contient uniquement une adresse Mac par ligne.

    A bientôt,


    Thierry DEMAN-BARCELO. Office Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    • Marqué comme réponse ToTo.R mardi 20 octobre 2020 07:58
    mardi 20 octobre 2020 07:04
  • Il faudra ecrire tes @ mac dans un fichier txt et les récupérer grace à la commande get-contenant en suite tu pourras faire une boucle, le script est bon mais l'algo non, tu debutes dans powershell ou dans les scripts ?


    Dakhama Mehdi : Windows developper https://github.com/dakhama-mehdi

    • Marqué comme réponse ToTo.R mardi 20 octobre 2020 07:58
    lundi 19 octobre 2020 15:48

Toutes les réponses

  • Que mets tu dans ton read-host ??? 

    Hhhhh cest normal tu rentres jamais plusieurs adresses MAC tu rentres une seule ligne = une seule valeur donc ton forrach considere ta variable comme une seule @mac


    Dakhama Mehdi : Windows developper https://github.com/dakhama-mehdi

    lundi 19 octobre 2020 15:46
  • Il faudra ecrire tes @ mac dans un fichier txt et les récupérer grace à la commande get-contenant en suite tu pourras faire une boucle, le script est bon mais l'algo non, tu debutes dans powershell ou dans les scripts ?


    Dakhama Mehdi : Windows developper https://github.com/dakhama-mehdi

    • Marqué comme réponse ToTo.R mardi 20 octobre 2020 07:58
    lundi 19 octobre 2020 15:48
  • Bonjour,

    comme l'indique Mehdi,

    en remplaçant la ligne actuelle "read-host" par 

    $MAC=get-content .\FichierListeMac.txt

    Tu devrais avoir un fonctionnement correct du script si le fichier contient uniquement une adresse Mac par ligne.

    A bientôt,


    Thierry DEMAN-BARCELO. Office Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    • Marqué comme réponse ToTo.R mardi 20 octobre 2020 07:58
    mardi 20 octobre 2020 07:04
  • Bonjour,

    Je viendrais ajouter qu'un export CSV pourrait également répondre à ton problème.


    Merci de marquer comme reponses les interventions qui vous ont ete utile.

    mardi 20 octobre 2020 07:13
  • Bonjour,

    Merci pour vos réponses.

    Effectivemet, l'utilisation d'un .txt solutionne mon problème.

    Oui, je suis débutant en scripting.

    Merci.

    mardi 20 octobre 2020 07:59
  • Bonjour toto.R

    Les réponses fournies plus haut sont valides

    $MAC= Get-Content PathTo\ListeMac.txt # Une entrée par ligne

    $MAC = Get-Content PathTo\Listemac.csv

    Attention si tu utilises un .csv avec des headers (comme tout bon .cqv devrait avoir), dans ta boucle foreach il faudra mettre $ligne.<NomHeaderPourlesMAC> pour appeler la bonne propriété.

    ... cependant, cela ne répond pas nécessairement à ton besoin : Utilisation interactive.

    Si tu tiens à utiliser Read-Host, tu peux faire ainsi :

    $MAC = Read-Host "saisir la ou les MAC sous la forme suivante MAC1,MAC2"
    $MAC # on a MAC1,MAC2
    $MAC = $MAC -split ","
    $MAC # On a MAC1 sur une ligne et MAC2 sur une autre. La forme est bonne
    foreach ($item in $MAC){}
    # Je fais tourner la boucle à vide juste pour voir la dernière valeur de $Item
    $item # on a MAC2
    # Je n'ai bien qu'un seul objet de forme correcte

    cordialement

    Olivier

    mardi 20 octobre 2020 08:24