Question Traitement de donnée CSV (Netbios, IPAdress, SN...

Plus d'informations
il y a 9 ans 7 mois #22151 par guillaume
Bonjour,

J'ai mit en place un script assez pratique qui me permet d'effectuer une extraction de la base SCCM au format CSV, ensuite mon script tape sur le CSV pour récupérer certaines informations (exemple, je veux savoir sur quel poste se connecte un utilisateur, je saisie son login, un where-object va trouver la correspondance dans mon CSV et me ressort les lignes dans un GridView)

Ma problématique actuelle est que lorsque je saisie les informations dans ma textbox avec un retour à la ligne entre chaque valeur ma requête ne trouve que la dernière valeur alors que lorsque je met un espace entre chaque valeur toutes les informations ressorte bien (j'effectue un replace des espace par des | , j'ai tenté de faire de même pour les retour à la ligne ( `n et `r ) mais sans succès.

Voici une de mes requêtes lorsque je tape sur le NetBiosName :
La variable $reqvar permet juste de voir si je recherche sur le netbios ou sur une autre valeur
La variable $row est le contenu de ma textbox
La variable $reqsccm contient le CSV que j'exploite

if($reqvar -eq \"NetBiosName\"){$row = $textBox.Text.Trim()
$rows = $row.replace(\"`n\",\" \").replace(\" \",\"|\")
$row1 = $reqsccm | where {$_.$reqvar -match ($rows)} | Sort-Object $reqvar}
else{$row1 = $reqsccm | where {$_.$reqvar -match ($user)} | Sort-Object $reqvar} #dans le cas ou reqvar est différent de netbiosname


foreach ($rows1 in $row1){$rows1 = ($rows1.NetBIOSName, $rows1.LastLogonUserName, $rows1.LastLogonTimeStamp, $rows1.TopUser , $rows1.IPSubnets , $rows1.LastHardwareScan , $rows1.SerialNumberSCCM , $rows1.Manufacturer ,$rows1.ModelSCCM ,$rows1.OS)
if($rows1 -ne $null){$Datagridview1.Rows.Add($rows1)}}

}


Auriez vous une idée à ce sujet ? (à mon avis le souci doit être lié au format de la valeur de ma variable $rows qui doit bloqué mais je ne sais pas pourquoi)

Merci à vous !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22152 par Laurent Dardenne
Salut,
un exemple complet utilisant une simple textbox serait apprécié :)

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22153 par guillaume
Le souci est identique sans textbox (j'ai décomposé la requête en mettant a la main que la valeur de $row pour ensuite appliquer les replaces etc et le résultat est identique.

Par exemple si je fait :

$row = \"413243
412530\"


Lorsque je vérifie la valeur de $row j'ai :

413243
412530

Ensuite je lance les commandes suivantes :

$rows = $row.replace(\"`n\",\" \").replace(\" \",\"|\").Trim()

$reqvar=\"NetBiosName\"

$REQSCCM = Import-Csv -path \".\Querie.csv\" -Delimiter \";\" | Sort-Object \"NetBiosName\" -Unique

le résultat me ressort qu'une valeur alors que si je fait celà :

$row = \"412530 413243\"
$rows = $row.replace(\"`n\",\" \").replace(\" \",\"|\").Trim()

$reqvar=\"NetBiosName\"

$REQSCCM = Import-Csv -path \".\Querie.csv\" -Delimiter \";\" | Sort-Object \"NetBiosName\" -Unique


Et la j'ai bien mes deux valeurs qui ressortent.

Dans le cadre du travail je suis amené à effectuer des requêtes sur une centraine de valeurs du coup je suis obligé de mettre un espace entre chaque valeur de ma textbox (ce qui est très contraignant)

Ce qui est étrange c'est que lorsque je consulte la valeur de $rows en mettant un espace et sans retour a la ligne j'ai \&quot;412530|413243\&quot; et lorsque je met le retour a la ligne avec le replace du `n j'ai exactement la même valeur en résultat mais peut être que le type cause problème? (sachant qu'après un gettype je suis sur des string pour les deux résultats)<br><br>Message édité par: guil77, à: 18/08/16 10:12

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22155 par Philippe
salut guil77

essai avec ceci :
[code:1]$rows = $row.replace(\&quot;`n\&quot;,\&quot; \&quot;«»).replace(\&quot;`r\&quot;,\&quot;\&quot;«»).replace(\&quot; \&quot;,\&quot;|\&quot;«»).Trim()
[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22156 par Laurent Dardenne
Avec un exemple simple complet on peut trouver le problème par rapport à ton code.
Test avec une textbox multiline acceptant les retours chariot :
[code:1][byte[]][char[]]$textBox1.Text
# 49
# 13 &lt;---
# 10 &lt;---
# 50
$row=\&quot;1`r`n2\&quot;
[byte[]][char[]]$row
$row.replace(\&quot;`n\&quot;,\&quot; \&quot;«»).replace(\&quot; \&quot;,\&quot;|\&quot;«»).Trim()
#|2

$row.replace(\&quot;`r`n\&quot;,\&quot; \&quot;«»).replace(\&quot; \&quot;,\&quot;|\&quot;«»).Trim()
#1|2

#simplification
$row.replace(\&quot;`r`n\&quot;,\&quot;|\&quot;«»).Trim()
#1|2

Sans regex
$ofs='|'
$row=\&quot;1`r`n2\&quot;
@\&quot;
$(($row.Split(\&quot;`r`n\&quot;,[System.StringSplitOptions]::RemoveEmptyEntries)).Trim())
\&quot;@[/code:1]
Transforme la chaine en un tableau puis appel Trim() sur chacun de ses élément
Enfin, PS transforme le tableau, inséré dans une chaine double quote, en utilisant la variable $OFS

On considère ces cas
[code:1]
$row=\&quot;1`r`n2\&quot;
$row=\&quot;1 `r`n2 \&quot;
$row=\&quot; 1 `r`n 2 \&quot;
$row=\&quot;1`r`n2`r`n\&quot;
$row=\&quot;`r`n1`r`n2`r`n\&quot;
$row=\&quot;`r`n 1`r`n2 `r`n\&quot;
[/code:1]
Mais pas celui-ci :
[code:1]$row=\&quot; `r`n 1`r`n2 `r`n\&quot;[/code:1]
Comme je suis pour le partage, je te le laisse :P

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22158 par Philippe
@Laurent

j'avoue que c'est mieux quand on donne une explication clair !! :)<br><br>Message édité par: 6ratgus, à: 18/08/16 14:52

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.067 secondes
Propulsé par Kunena