• [^] # Re: Pas d'alternative assez implémentée

    Posté par . En réponse au journal Le système de fichiers exFAT, dans la lignée des autres FAT, une menace pour la compatibilité des appareils mobiles avec les systèmes libres. Évalué à 3.

    beaucoup beaucoup beaucoup moins.

    Il faut voir qu'en bash tout est une chaine de caractère, en powershell ce qu'une commande te renvoie ca peut être une chaine avec un type, donc les commandes qui marchent sur les chaines de caractères ne marche pas, ca peut etre une chaine qui fait référence à un autre objet ou a un tableau, donc rebelotte.
    Exemple bête :
    je devais récupérer une liste d'IP :
    quand je lance la commande

    $ Get-Bidule
    Name IpAddresses
    a {10.170.16.33}
    b {10.170.16.34,10.170.16.35}

    Bon ben ok -> moi je veux que les ip, donc dans les doc de powershell (que je trouve bien moins facile a trouver et/ou bien moins faites que pour le scripting shell : par exemple je sais toujours pas comment lancer un script powershell à partir de la ligne de commande. Ca doit se trouver dans une doc, mais où ???)
    il me dis d'utiliser select

    Get-Bidule |Select IpAddresses
    IpAddresses
    {10.170.16.33}
    {10.170.16.34,10.170.16.35}

    Et ben en réalité la ca t'extrait juste la colonne (donc avec l'entête). -> Ce n'est pas une chaine de caractère, il faut utilise "$_.name"

    Get-Bidule | ForEach $_.IpAddresses
    {10.170.16.33}
    {10.170.16.34,10.170.16.35}

    Bon, on progresse, mais même comme ça, on peut utiliser leur système de grep/sed itou (moins lisible qu'une commande spécifique amha : %{-replace motif , a_remplacer} de tête) :
    ca marche pas !
    Tu vois ça : pourquoi ça marche pas ? C'est parce que c'est un tableau !
    donc sur chaque ligne, il faut lui faire une boucle for et sur la longueur du champ et ensuite afficher ce que l'on souhaite (je sais même plus comment j'ai fait,
    Là ou en bash, on aurait juste extrait la nieme colonne, fait un sed de derrière les fagots et basta.

    Bref, powershell introduis d'autres types, mais qui sont incompatibles entre eux (en java, si tu veux utiliser un objet en tant que chaine de caractère, il fait automatiquement appel à la fonction toString(), et pourtant java est un lgg de plus haut niveau et nettement plus strict et puissant que powershell).

    C'est peut être que je n'ai pas du tout l'habitude du powershell et que quand on connais toutes les astuces itou c'est super facile, peut être : mais elle est où la doc qui explique ça bien etc... ?

    (et tu as vu, je n'ai pas du tout parlé de l'ergonomie du shell "powershell". Teste le, tu me diras ce que tu en penses. Moi j'aime pas du tout : si je suis au milieu d'une boucle, j'aime pouvoir mettre des espaces pour aérer le code et séparer les parties qui sont faites).