J'ai un script PowerShell qui fait une requête SQL de plusieurs bases de données. Cela dépit des résultats dans un fichier CSV sur mon bureau. J'aimerais que le script PowerShell comparaisse 2 des colonnes, créez une nouvelle colonne si elles correspondent.
Cela me sauve juste le temps de faire le comparateur à chaque fois dans Excel. P>
I ne sais pas assez sur PowerShell pour faire cela. p>
Les résultats actuels dans le CSV sont comme celui-ci. p> Je voudrais que le script modifie le script à modifier le CSV à fais cela. p> ive a vu plusieurs scripts comment comparer plusieurs CSV et faire une nouvelle ... mais je préférerais simplement modifier celui qui est créé à partir de la requête SQL . P> Si cela aide ... Voici une copie et coller du fichier CSV que j'ai modifié le numéro de téléphone pour protéger le client ... Je visuelle le CSV à Exel. P> "ID","Phone","PhoneID"
"5521350","1112223333","1112223333"
3 Réponses :
$Data = Import-Csv "file.csv"
ForEach ($obj in $Data) {
$hashtable = [ordered]@{}
ForEach ($property in $obj.PSObject.properties.name) { $hashtable[$property] = $obj.$property }
$hashtable["match?"] = If ($obj.'PhoneNumber' -eq $obj.'PhoneNumberInDB2') {"Y"} Else {"N"}
$Data = $Data -ne $obj
$Data += New-Object -TypeName PSObject -Property $Hashtable
}
Merci pour l'aide .. Je reçois une erreur quand j'ai essayé cela. L'invocation de la méthode a échoué parce que [System.Management.Automation.psObject] ne contient pas de méthode nommée 'op_addition'. À la liste téléphonique.ps1: 97 Char: 1 + $ Data + = nouvel objet -Typename psobject -property $ hashtable + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ CatégorieInfo: InvalidOperation: (op_addition: chaîne) [], RunTimeException + EntièrementQualifiedError: MethodnotFoundNound
Quel est votre format de fichier CSV? Semble que vous n'imposez pas un fichier correct.
Je vois la méthode de cette approche, mais je pense que c'est le long chemin. Il n'y a aucune raison de créer synthétiquement une table de hachage, notamment pour convertir ultérieurement à un objet. PowerShell a plusieurs méthodes natives pour apporter des propriétés supplémentaires aux objets. Vous devez également éviter l'opérateur + = pour les matrices d'ajout.
D'accord, votre approche est beaucoup plus élégante.
Si je lis cela correctement peut-être que vous pouvez utiliser Quelque chose comme: p> Remarque: j'ai supprimé le "?" sur la nouvelle propriété (colonne) Nom. P>
blockQuote> Si vous devez réexporter pour réexporter pour réexporter le même fichier CSV, simplement tuyau ci-dessus suppose que vous souhaitez réutiliser le nom du fichier si vous souhaitez modifier le nom, vous pouvez le mettre dans un seul pipeline comme: p> Remarque: cette révision ne nécessite pas select-objet code> pour ajouter la propriété aux objets entrants. On dirait que les 2 propriétés que vous comparez sont dans le même objet à tout moment. Donc, vous devriez être capable d'obtenir cela sur un seul tuyau ...
$ données code> à exportation-csv code>: p > $ données code>. Parce que tout est sur le pipeline, il est plus efficace de mémoire. Bien que ce n'est pas normalement une question à moins que le fichier soit très important. P> p>
Cela semble fonctionner, mais je ne reçois aucun résultat ni des erreurs. Il n'y a pas de colonne dans la correspondance nommée CSV si cela va ...
Ok je l'ai essayé dans un nouveau script PS et il ne comparait toujours pas ... Désolé, je ne sais juste pas assez de PS pour comprendre pourquoi pas
J'ai joué avec cela à quelques reprises dans l'exécution du script après le SQL séparément et qu'il ne reçoit toujours aucun résultat. Je ne sais pas si ce CSV classifie ces titres de colonne de SQL comme des en-têtes ou non.
La façon dont il est écrit, il stocke les objets dans une variable. Il ne s'agira donc pas de générer une sortie et de ne pas changer le fichier. Je mettrai à jour la réponse avec une version légèrement modifiée pour recréer le fichier.
ok merci ... J'ai plusieurs fichiers qui ont plus de 4000 lignes longues et cela me sauvera un tas de temps à l'avenir
Voici encore une autre façon de faire le travail ... [ Grin em>] Qu'est-ce que c'est ... le code ... p> sortie avec des booléens ... p> sortie avec
Lorsque vous êtes prêt à le faire pour réel, remplacez simplement l'intégralité de la région # de la région / # EndRegion Code> avec un importateur-csv code> appel. Li>
Samevronenumber Code> Propriété
Vous pouvez remplacer ces éléments faux / true code> avec n / y code> si recherché. Il suffit d'échanger les marqueurs de commentaire sur la ligne 19 et 20. Si vous effectuez plus de traitement, le FAUX / TRUE CODE> Stuff fonctionne mieux que de simples lettres car elles sont converties automatiquement en Boolean à Posh. li>
Durttuff code> Collection Li>
N / Y CODE> ... P> ID Phone PhoneId SamePhoneNumber
-- ----- ------- ---------------
5521350 1112223333 1112223333 Y
2020202 2020202020 2000000002 N
3030303 3030303030 3030303030 Y
4040404 4040404040 4000000004 N
Ce n'est pas un CSV cependant
Je ne vois pas comment c'est pas un CSV ..
@ BND10706 - S'il s'agissait d'une CSV, les valeurs ne seraient pas centrées sous les en-têtes de colonne. Peu importe ce que le délimiteur était, cette mise en page n'est pas ce que l'on bénéficie d'un fichier de caractèreValue. ///// que obtenez-vous de
$ queryresult.gettype () code>?J'ai formaté pour être mieux visualisé.
@ BND10706 - Veuillez seulement poster des données d'échantillonnage comme c'est vraiment. Vous gaspillez votre temps ... et d'autres personnes avec des données d'échantillonnage falsifiées.
Je précise, il y a des numéros de téléphone client et des données de l'entreprise dans le CSV .. Je l'ai édité de toute façon pour protéger cela. Si cela aide vraiment à ne pas centrer des colonnes, je le ferai. Il a été simplement fait pour la compréhension visuelle et honnêtement ne devrait rien changer.
Ouvrez le CSV dans le bloc-notes et copiez-la et collez-la
@Lee_Dailey j'ai ajouté une copie et coller avec seulement le téléphone édité ... Je ne vois rien de quelque chose.
@PatrickMcVay Merci merci ... Je n'utilise pas trop souvent CSV et normalement ouvert à Excel.
@ BND10706 - La version Notepad est la vraie. Merci d'avoir posté cela ... Cela fait beaucoup plus de sens de votre question. [ Grin I>]