• [^] # Re: Tu vends du rêve

    Posté par . En réponse au journal Microsoft: Powershell libéré. Évalué à 3.

    Je crois que ce qui le gêne, c'est qu'il liste toutes les IP.

    C'est équivalent à :

    ip a | grep -Eo '([0-9]+\.){3}[0-9]+'
    

    On peut même faire plus court en powershell :

    (Get-NetIPAddress).ipaddress
    

    Du coup j'explicite ma commande précédente :
    Get-NetIPAddress affiche les infos sur les interfaces réseaux
    –AddressFamily IPv4 affiche uniquement les IP IPv4
    -AddressState Preferred affiche uniquement les interfaces actives (exclu le ethernet non branché qui a quand même reçu une adresse APIPA)

    Dans mon example, j'obtiens donc 2 interfaces :
    - l'interface loopback
    - l'interface réseau active

    Pour exclure loopback, je pipe le résultat avec Where-Object { $_.InterfaceAlias -ne 'Loopback Pseudo-Interface 1' }

    J'obtiens alors uniquement l'interface active. Il ne reste plus qu'à extraire uniquement l'IP avec ().IpAddress (ou | Select IPAddress)

    La commande est alors celle que j'ai donné :

    (Get-NetIPAddress –AddressFamily IPv4 -AddressState Preferred | Where-Object { $_.InterfaceAlias -ne 'Loopback Pseudo-Interface 1' }).IPAddress
    

    Le lecteur attentif remarquera que :

    • ça renverra plusieurs IP si il y a plusieurs interfaces actives (VPN par exemple), mais c'est aussi le cas de la commande linux dans le journal
    • on peut gagner quelques caractères :
    (Get-NetIPAddress –AddressFamily IPv4 -AddressState Preferred | ?{ $_.InterfaceAlias -notmatch 'Loop
    back' }).IPAddress
    

    (« ? » est un alias pour Where-Object)