Quelqu'un peut-il expliquer pourquoi em> strong> mes premiers exemples ne fonctionnent pas et pourquoi l'ajout d'un objet de foresach résout le problème? Merci d'avance! J'ai analysé le retour d'une commande dans une haquetable (échantillon à la fin de la poste) et souhaitez enregistrer les informations à un fichier dans le cadre de mon traitement. Je sais que enregistre seulement une seule ligne de et finnez avec des lignes de p> alors j'ai essayé de boucler et gérer chacun individuellement avec p> et finnez avec p> résolu avec em>:
$ ht.getenumerator () | Nom de type-objet code> retournera le hachage complet à l'écran, triés. Cependant, une fois que j'essaie d'envoyer des choses au fichier, il se casse. P>
System.Collections.hashable code>. Donc, j'ai aussi essayé p>
$ht = @{
"Server address" = "server.net";
"Client address" = "10.20.121.153";
"User name" = "myuser"
}
6 Réponses :
Votre premier exemple ne fonctionne pas, ni mieux, fonctionne partiellement, car vous essayez d'obtenir une valeur de propriété dans la chaîne. Normalement, à l'intérieur des chaînes, l'analyseur est capable de résoudre uniquement des variables directes (comme Pour la boucle, cela devrait fonctionner: p> ou même meilleur p> $ clé code>). Pour résoudre une variable plus complexe, vous avez besoin de parenthèses.
Merci pour la solution One-Liner - la brièveté est belle. Bien que je pense que je pense qu'après avoir lu les autres, je me penche vers la combinaison de vos abréviations avec mon type et un format légèrement plus explicite pour la lisibilité.
Comme vous pouvez le voir dans Microsoft Documentation, une table de hachage est simplement une collection de paires nom-valeur.
donc Un bon moyen d'utiliser est P> $ ht code> est vraiment
system.collections.hashastable code> Composé de
System.Collections.DictionaryRentryRyRyReRyRY CODE>. P>
foreach ($i in $ht.keys)
{
add-content log.txt ("{0} {1}" -f $i, $ht[$i])
}
Ah ... donc ma boucle d'origine était si proche. Donc, forcer le formatage convertit vers des chaînes que la teneur en ajoute gère gracieusement. Je t'ai eu.
Que diriez-vous:
$ht.GetEnumerator() | Sort-Object Name | out-string | Add-Content log.txt
Intéressant - Cela bénéficie également de crachant les en-têtes également - Ça va être utile quand je veux ceux à l'avenir - merci!
Répondre à la partie dans votre premier exemple p> PowerShell prend suivant p> est similaire. Personnellement, je pense que PowerShell devrait être assez intelligent et aider ici. La question est "comment?". Les designers ne souhaitaient probablement pas coder la sortie. Il pourrait être $ ht code> et essaie de le convertir en quelque sorte en une chaîne de sorte qu'il puisse être stocké via
add-teneur code>. Parce qu'il n'y a pas de conversion définie pour la haquetable, seul le nom de type est renvoyé de la conversion. Identique que par exemple
nouvel objet aléatoire | add-teneur d: \ log.txt code>. Encore une fois, seul le nom de type est écrit. P>
getenumerator code> renvoie l'objet utilisé pour l'itération; Objets de type
System.Collections.DictionaryRentryRyRyRyRyRyRyRyRyRY > sont retournés. Encore une fois, il n'y a pas de conversion en chaîne, de sorte que les noms de type sont retournés. P>
"{clé}: {valeur}" code> ou
"{clé} = {valeur}" code> ou
"{key} / {valeur}" code>, ou ... le format n'est pas clair, ils l'ont donc laissé pour nous de décider et de formater comme vous l'avez fait avec la relève
foreach code>. p> p>
Merci pour l'explication - je savais qu'il devait être quelque chose avec la conversion à des cordes, je ne saisis pas simplement les mécanismes impliqués. La combinaison de votre élucidation et des exemples plus spécifiques de tous ont aidé immensément!
Je suis d'accord avec Mjolinor ... Je ne suis tout simplement pas assez de points pour voter ... Plus je vais ajouter que vous n'avez pas besoin de Getenumerator
$ht | out-string | add-content log.txt
Vous pouvez écrire une vidage "RAW" d'une table de hachage à un fichier ASCII à l'aide de fichiers hors fichier:
$data = @{ Name = "Something" Type = "123" } $data | Out-File "myfile.txt" -Encoding ascii