Question Suppression caractère

Plus d'informations
il y a 4 ans 11 mois #28637 par dimshell
Suppression caractère a été créé par dimshell
J'ai un fichier CSV avec des IP et Port

192.168.1.1;443;192.168.1.2;1500
192.168.1.10;192.168.1.10;192.168.1.20;192.168.10.20

Comment supprimer la deuxième ligne ?
Car ils ne respectent pas mes regexs mais s'affiche ne ne comprends pas

[code:1]#Supprime le fichier CSV

try {
Remove-Item \"$path\Windump$name.csv\" -ErrorAction SilentlyContinue
}


catch [System.Management.Automation.ItemNotFoundException]{

}


$name=[system.environment]::MachineName


# Permets de lister les cartes réseau connectées

try{
$eth = Invoke-Expression \"$env:USERPROFILE\Desktop\Windump.exe -ArgumentList -D\"
}
catch [System.InvalidOperationException] {

write-host \"Logiciel windump manquant\"

}
catch [System.Management.Automation.CommandNotFoundException]{
write-host \"Logiciel windump manquant\"
}
# Parcours les cartes et si il y a intel dedans stock le premier caractére donc le numéro de la carte pour notre commande Windump de la varaible $argum
foreach($item in $eth){

if ($item -match 'intel'){

$newitem =$item.Substring(0,1)
}
else {
$newitem=1
}
}
# Variable contenant des variables d'environnementspour le chemin d'accès au différents fichiers
$path=\"$($env:USERPROFILE)\Documents\"
$pathexec=\"$($env:USERPROFILE)\Desktop\"

# Commande WinDump
$argum='-i 2 -q -n -t -c 500 \"host ip\"'

# Contenant le résultat du WinDump
$fichier = \"$path\Windump.txt\"

# Contenant le résultat après modifiction de la variable $fichier
$newcontenu = \"$path\WindumpTri.txt\"

# Colonne du CSV
$Header = \"c1\",\"ipsrc\", \"portsrc\", \"ipdest\", \"portdest\", \"c6\"
$Header2 = \"ipsrc\", \"portsrc\", \"ipdest\", \"portdest\"


# Lancement d'une application Windump.exe avec l'argument une variable contenant la commande WinDump et écrit dans le fichier fournit

try{
$process=Start-Process $pathexec\Windump.exe -PassThru -ArgumentList $argum -RedirectStandardOutput $fichier
}
catch [System.InvalidOperationException]{
Write-Host \"Logiciel windump manquant\"
}


# Attends la fin d'execution du processus pour continuer le script
$process.WaitForExit()

# Lecture du fichier comme ci celui-ci été un CSV
$dump = Import-Csv $fichier -Header $Header -Delimiter \" \"


# Remplace après l'ip de destination le : par du vide (parcours l'ensemble des objets)
$dump | foreach {
$_.ipdest = $_.ipdest -replace \":\",\" \"
$_.ipdest = $_.ipdest -replace \"tell\",\" \"
$_.ipdest = $_.ipdest -replace \"is-at\",\" \"
$_.ipsrc = $_.ipsrc -replace \"bad-len\",\" \"
$_.ipsrc = $_.ipsrc -replace \"reply\",\" \"
$_.ipsrc = $_.ipsrc -replace \"who-has\",\" \"
}


# Remplace via une regex les differentes colonnes (parcours l'ensemble des objets)
$result = $dump | foreach {
$portsrc = $_.ipsrc -replace [regex]\"([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\",\"\"
$ipsrc = ($_.ipsrc -split [regex]\"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\"«»)[1]
$portdest = $_.ipdest -replace [regex]\"([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\", \"\"
$ipdest = ($_.ipdest -split [regex]\"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\"«»)[1]
$_ | select @{n=\"ipsrc\";e={$ipsrc}},@{n=\"portsrc\";e={$portsrc}},@{n=\"ipdest\";e={$ipdest}},@{n=\"portdest\";e={$portdest}}
}

# Ecrit dans le résultat dans le fichier $newcontenu et ajoute entre l'ip dest/ source / port un ; (parcours l'ensemble des objets) dans la colonne ipsrc si elle est vide la supprimer
$result | where {$_.ipsrc -ne $null} | foreach {
\"$($_.ipsrc);$($_.portsrc);$($_.ipdest);$($_.portdest)\"
} | Set-Content $newcontenu

# Export en CSV sans doublons
$dump2 =Import-Csv $newcontenu -Header $Header2 -Delimiter \";\"

$dump2 | select ipsrc, portsrc, ipdest, portdest -Unique | export-csv $path\Windump$name.csv \";\" -NoTypeInformation







# Récupére le fichier windump
$File=Get-ChildItem \"$path\Windump$name.csv\"
# Test la présence du fichier
If ((Test-Path \"$path\Windump$name.csv\"«») -eq $True) {
Write-Host \"Fichier CSV $name Present à la date\" $File.LastWriteTime
}
else{
Write-Host \"Fichier CSV $name Absent\"
}


[/code:1]

Message édité par: dimshell, à: 3/04/19 14:44<br><br>Message édité par: dimshell, à: 3/04/19 14:45

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

Plus d'informations
il y a 4 ans 11 mois #28638 par dimshell
Réponse de dimshell sur le sujet Re:Suppression caractère
Résolu mais à vérif svp :

[code:1]

#Supprime le fichier CSV

try {
Remove-Item \&quot;$path\Windump$name.csv\&quot; -ErrorAction SilentlyContinue
}


catch [System.Management.Automation.ItemNotFoundException]{

}


$name=[system.environment]::MachineName


# Permets de lister les cartes réseau connectées

try{
$eth = Invoke-Expression \&quot;$env:USERPROFILE\Desktop\Windump.exe -ArgumentList -D\&quot;
}
catch [System.InvalidOperationException] {

write-host \&quot;Logiciel windump manquant\&quot;

}
catch [System.Management.Automation.CommandNotFoundException]{
write-host \&quot;Logiciel windump manquant\&quot;
}
# Parcours les cartes et si il y a intel dedans stock le premier caractére donc le numéro de la carte pour notre commande Windump de la varaible $argum
foreach($item in $eth){

if ($item -match 'intel'){

$newitem =$item.Substring(0,1)
}
else {
$newitem=1
}
}
# Variable contenant des variables d'environnementspour le chemin d'accès au différents fichiers
$path=\&quot;$($env:USERPROFILE)\Documents\&quot;
$pathexec=\&quot;$($env:USERPROFILE)\Desktop\&quot;

# Commande WinDump
$argum='-i 2 -q -n -t -c 500 \&quot;host IP SERVEUR\&quot;'

# Contenant le résultat du WinDump
$fichier = \&quot;$path\Windump.txt\&quot;

# Contenant le résultat après modifiction de la variable $fichier
$newcontenu = \&quot;$path\WindumpTri.txt\&quot;

# Colonne du CSV
$Header = \&quot;c1\&quot;,\&quot;ipsrc\&quot;, \&quot;portsrc\&quot;, \&quot;ipdest\&quot;, \&quot;portdest\&quot;, \&quot;c6\&quot;
$Header2 = \&quot;ipsrc\&quot;, \&quot;portsrc\&quot;, \&quot;ipdest\&quot;, \&quot;portdest\&quot;


# Lancement d'une application Windump.exe avec l'argument une variable contenant la commande WinDump et écrit dans le fichier fournit

try{
$process=Start-Process $pathexec\Windump.exe -PassThru -ArgumentList $argum -RedirectStandardOutput $fichier
}
catch [System.InvalidOperationException]{
Write-Host \&quot;Logiciel windump manquant\&quot;
}


# Attends la fin d'execution du processus pour continuer le script
$process.WaitForExit()

# Lecture du fichier comme ci celui-ci été un CSV
$dump = Import-Csv $fichier -Header $Header -Delimiter \&quot; \&quot;


# Remplace après l'ip de destination le : par du vide (parcours l'ensemble des objets)
$dump | foreach {
$_.ipdest = $_.ipdest -replace \&quot;:\&quot;,\&quot; \&quot;
$_.ipdest = $_.ipdest -replace \&quot;tell\&quot;,\&quot; \&quot;
$_.ipdest = $_.ipdest -replace \&quot;is-at\&quot;,\&quot; \&quot;
$_.ipsrc = $_.ipsrc -replace \&quot;bad-len\&quot;,\&quot; \&quot;
$_.ipsrc = $_.ipsrc -replace \&quot;reply\&quot;,\&quot; \&quot;
$_.ipsrc = $_.ipsrc -replace \&quot;who-has\&quot;,\&quot; \&quot;
}


# Remplace via une regex les differentes colonnes (parcours l'ensemble des objets)
$result = $dump | foreach {
$portsrc = $_.ipsrc -replace [regex]\&quot;([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\&quot;,\&quot;\&quot;
$ipsrc = ($_.ipsrc -split [regex]\&quot;([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\&quot;«»)[1]
$portdest = $_.ipdest -replace [regex]\&quot;([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\&quot;, \&quot;\&quot;
$ipdest = ($_.ipdest -split [regex]\&quot;([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\&quot;«»)[1]
$_ | select @{n=\&quot;ipsrc\&quot;;e={$ipsrc}},@{n=\&quot;portsrc\&quot;;e={$portsrc}},@{n=\&quot;ipdest\&quot;;e={$ipdest}},@{n=\&quot;portdest\&quot;;e={$portdest}}
}

# Ecrit dans le résultat dans le fichier $newcontenu et ajoute entre l'ip dest/ source / port un ; (parcours l'ensemble des objets) dans la colonne ipsrc si elle est vide la supprimer
$result | where {$_.ipsrc -ne $null} | foreach {
\&quot;$($_.ipsrc);$($_.portsrc);$($_.ipdest);$($_.portdest)\&quot;
} | Set-Content $newcontenu

# Export en CSV sans doublons
$content = Get-Content $newcontenu | where { $_ -match \&quot;([0-9]{1,3}\.){3}[0-9]{1,3}(\;«»)[0-9]{1,5}(\;«»)([0-9]{1,3}\.){3}[0-9]{1,3}\&quot; }
Set-Content -Path $newcontenu -Value $content

$dump2 =Import-Csv $newcontenu -Header $Header2 -Delimiter \&quot;;\&quot;

$dump2 | select ipsrc, portsrc, ipdest, portdest -Unique | export-csv $path\Windump$name.csv \&quot;;\&quot; -NoTypeInformation



# Récupére le fichier windump
$File=Get-ChildItem \&quot;$path\Windump$name.csv\&quot;
# Test la présence du fichier
If ((Test-Path \&quot;$path\Windump$name.csv\&quot;«») -eq $True) {
Write-Host \&quot;Fichier CSV $name Present à la date\&quot; $File.LastWriteTime
}
else{
Write-Host \&quot;Fichier CSV $name Absent\&quot;
}


[/code:1]<br><br>Message édité par: dimshell, à: 3/04/19 15:44

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

Plus d'informations
il y a 4 ans 11 mois #28639 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Suppression caractère
Salut,

Je t'avoue que je n'ai vu ce qui change dans ton 2e code par rapport au 1er. Tu aurais pu peut-être nous indiquer quel était le changement...

Ce que j'aurais fait, avant de commencer tout traitement sur le fichier, c'est une validation des données en entrée.

Ce qui est dans ton cas assez facile car tu as juste à vérifier que tu n'aies pas d'objet dont la propriété PortSrc ou PortDest contient un point (cas d'une adresse IP).

Arnaud<br><br>Message édité par: Arnaud, à: 3/04/19 15:18

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 4 ans 11 mois #28641 par dimshell
Réponse de dimshell sur le sujet Re:Suppression caractère
C'est vrai je n'y ai pas pensé :S :pinch:

Mais après c'est normal c'est le même code #bébête


Est ce que ma solution est correct , je vais me pencher sur ta solution en attendant.

J'ai modifié au niveau :

[code:1]
# Liste du fichier et vérifie si les lgines respectent la regex
$content = Get-Content $newcontenu | where { $_ -match \&quot;([0-9]{1,3}\.){3}[0-9]{1,3}(\;«»)[0-9]{1,5}(\;«»)([0-9]{1,3}\.){3}[0-9]{1,3}\&quot; }
# Envoi le résultat dans le fichier
Set-Content -Path $newcontenu -Value $content


$dump2 =Import-Csv $newcontenu -Header $Header2 -Delimiter \&quot;;\&quot;

# Export en CSV sans doublons
$dump2 | select ipsrc, portsrc, ipdest, portdest -Unique | export-csv $path\Windump$name.csv \&quot;;\&quot; -NoTypeInformation
[/code:1]

Message édité par: dimshell, à: 3/04/19 15:46<br><br>Message édité par: dimshell, à: 3/04/19 15:52

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

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