Question Traitement de donnée CSV (Netbios, IPAdress, SN...
- guillaume
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 3
- Remerciements reçus 0
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
un exemple complet utilisant une simple textbox serait apprécié
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- guillaume
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 3
- Remerciements reçus 0
Par exemple si je fait :
$row = \"413243
412530\"
Lorsque je vérifie la valeur de $row j'ai :
Ensuite je lance les commandes suivantes :413243
412530
le résultat me ressort qu'une valeur alors que si je fait celà :$rows = $row.replace(\"`n\",\" \").replace(\" \",\"|\").Trim()
$reqvar=\"NetBiosName\"
$REQSCCM = Import-Csv -path \".\Querie.csv\" -Delimiter \";\" | Sort-Object \"NetBiosName\" -Unique
$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 \"412530|413243\" 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.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
essai avec ceci :
[code:1]$rows = $row.replace(\"`n\",\" \"«»).replace(\"`r\",\"\"«»).replace(\" \",\"|\"«»).Trim()
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Test avec une textbox multiline acceptant les retours chariot :
[code:1][byte[]][char[]]$textBox1.Text
# 49
# 13 <---
# 10 <---
# 50
$row=\"1`r`n2\"
[byte[]][char[]]$row
$row.replace(\"`n\",\" \"«»).replace(\" \",\"|\"«»).Trim()
#|2
$row.replace(\"`r`n\",\" \"«»).replace(\" \",\"|\"«»).Trim()
#1|2
#simplification
$row.replace(\"`r`n\",\"|\"«»).Trim()
#1|2
Sans regex
$ofs='|'
$row=\"1`r`n2\"
@\"
$(($row.Split(\"`r`n\",[System.StringSplitOptions]::RemoveEmptyEntries)).Trim())
\"@[/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=\"1`r`n2\"
$row=\"1 `r`n2 \"
$row=\" 1 `r`n 2 \"
$row=\"1`r`n2`r`n\"
$row=\"`r`n1`r`n2`r`n\"
$row=\"`r`n 1`r`n2 `r`n\"
[/code:1]
Mais pas celui-ci :
[code:1]$row=\" `r`n 1`r`n2 `r`n\"[/code:1]
Comme je suis pour le partage, je te le laisse
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
j'avoue que c'est mieux quand on donne une explication clair !!
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Traitement de donnée CSV (Netbios, IPAdress, SN...