Question
Traitement des logs dhcp de windows
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 14 ans 8 mois #9929
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Traitement des logs dhcp de windows
Malheureusement, chez moi cela fonctionne bien :/
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Dada
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 14 ans 8 mois #9930
par Dada
Réponse de Dada sur le sujet Re:Traitement des logs dhcp de windows
Si ça fonctionne de votre coté, je vais refaire le topo depuis le début pour voir quelles sont les différences entre nos fichiers.
1 - Voici mon arboresence :
[code:1]
C:\script\script_dhcp\script.ps1
C:\script\script_dhcp\tables\username_table.csv
[/code:1]
2 - Voici la forme de mon fichier username_table.csv
[code:1]
PC4500;Christian PELOUSE
[/code:1]
3 - Voici mon script
[code:1]
# Déclaration de la variable de recherche des hostnames dans le fichier \"usernames_table.csv\"
$srch_hostname = Get-Content C:\script\script_dhcp\tables\usernames_table.csv | foreach{ $_.split(';')[0] }
# Déclaration de la variable de recherche des usernames dans le fichier 'usernames_table.csv\"
#$srch_username = Get-Content C:\script\script_dhcp\tables\usernames_table.csv | foreach{ $_.split(';')[1] }
$srch_username = @{}
Get-Content C:\script\script_dhcp\tables\usernames_table.csv | foreach{ $srch_username += @{\"$($_.split(';')[0])\" = \"$($_.split(';')[1])\"} }
# Déclaration du chemin contenant les logs dhcp
$dhcplogpath = \"C:\windows\system32\dhcp\"
# Déclaration du fichier contenant le résultat de l'extraction
$extractfile = \"C:\script\extract_dhcp.csv\"
# Obtention de la date de la veille
$yesterday=(get-date (get-date).AddDays(-1) -uformat %Y%m%d)
# Obtention des 3 premières lettres du jour de la veille
$logdate=([string]((get-date).AddDays(-1).DayofWeek)).substring(0,3)
#Création des colonnes du fichier csv d'extraction des données des logs dhcp
\"nevent,date,time,event,ip,hostname,mac\" > $extractfile
# Obtention des lignes du fichier dhcp de log contenant le code 11(dhcp renew) et les hostnames à pister
$extract = get-content $dhcplogpath\DhcpSrvLog-$logdate.log | select-string ^11 | select-string $srch_hostname
$extract >> $extractfile
# Exportation des colonnes du csv vers le fichier final
$impextractfile = Import-CSV $extractfile
$impextractfile | Select-Object date, time, hostname, ip | Export-CSV C:\script\temp.csv -NoTypeInformation
# Suppression des guillemets dans le fichier csv
$delguill = Get-Content C:\script\temp.csv | Foreach {$_ -replace '\"',''}
$delguill > C:\script\temp.csv
# Suppresion de la ligne contenant les virgules du fichier d'origine
$delvirgule = get-content C:\script\temp.csv | where {$_ -notmatch \",,,\"}
$delvirgule > C:\script\temp.csv
# Insertion du nom de la personne en fonction du hostname
#Import-Csv C:\script\temp.csv -Delimiter ',' | % { $_.ip = $_.ip+\",test\" ; $_} | Export-Csv C:\script\temp2.csv -Delimiter ',' -NoTypeInformation
$impextractfile | Select-Object date, time, hostname, @{Label='username';Expression={$srch_username.\"$($_.hostname)\"}}, ip | Export-CSV C:\script\temp2.csv -NoTypeInformation
# Suppression des guillemets dans le fichier csv
$delguillbis = Get-Content C:\script\temp2.csv | Foreach {$_ -replace '\"',''}
$delguillbis > C:\script\temp2.csv
# Suppresion de la ligne contenant les virgules du fichier d'origine
$delvirgulebis = get-content C:\script\temp2.csv | where {$_ -notmatch \",,,\"}
$delvirgulebis > C:\script\temp2.csv
[/code:1]
4 - Voici ce que j'obtiens dans le fichier extract_dhcp.csv
[code:1]
nevent,date,time,event,ip,hostname,mac
11,06/30/11,08:01:27,Renew,192.168.153.52,PC4500.entreprise.fr,F04DA27E5292,
[/code:1]
5 - Voici ce que j'obtiens dans le fichier temp.csv
[code:1]
date,time,hostname,ip
06/30/11,08:01:27,PC4500.entreprise.fr,192.168.153.52
[/code:1]
6 - Voici ce que j'obtiens dans le fichier temp2.csv
[code:1]
date,time,hostname,username,ip
06/30/11,08:01:27,PC4500.entreprise.fr,,192.168.153.52
[/code:1]
Dans ce fichier, j'ai bien deux virgules successives entre le hostname et l'ip mais le username Christian PELOUSE n'apparait pas<br><br>Message édité par: shellfree, à: 18/07/11 10:47
1 - Voici mon arboresence :
[code:1]
C:\script\script_dhcp\script.ps1
C:\script\script_dhcp\tables\username_table.csv
[/code:1]
2 - Voici la forme de mon fichier username_table.csv
[code:1]
PC4500;Christian PELOUSE
[/code:1]
3 - Voici mon script
[code:1]
# Déclaration de la variable de recherche des hostnames dans le fichier \"usernames_table.csv\"
$srch_hostname = Get-Content C:\script\script_dhcp\tables\usernames_table.csv | foreach{ $_.split(';')[0] }
# Déclaration de la variable de recherche des usernames dans le fichier 'usernames_table.csv\"
#$srch_username = Get-Content C:\script\script_dhcp\tables\usernames_table.csv | foreach{ $_.split(';')[1] }
$srch_username = @{}
Get-Content C:\script\script_dhcp\tables\usernames_table.csv | foreach{ $srch_username += @{\"$($_.split(';')[0])\" = \"$($_.split(';')[1])\"} }
# Déclaration du chemin contenant les logs dhcp
$dhcplogpath = \"C:\windows\system32\dhcp\"
# Déclaration du fichier contenant le résultat de l'extraction
$extractfile = \"C:\script\extract_dhcp.csv\"
# Obtention de la date de la veille
$yesterday=(get-date (get-date).AddDays(-1) -uformat %Y%m%d)
# Obtention des 3 premières lettres du jour de la veille
$logdate=([string]((get-date).AddDays(-1).DayofWeek)).substring(0,3)
#Création des colonnes du fichier csv d'extraction des données des logs dhcp
\"nevent,date,time,event,ip,hostname,mac\" > $extractfile
# Obtention des lignes du fichier dhcp de log contenant le code 11(dhcp renew) et les hostnames à pister
$extract = get-content $dhcplogpath\DhcpSrvLog-$logdate.log | select-string ^11 | select-string $srch_hostname
$extract >> $extractfile
# Exportation des colonnes du csv vers le fichier final
$impextractfile = Import-CSV $extractfile
$impextractfile | Select-Object date, time, hostname, ip | Export-CSV C:\script\temp.csv -NoTypeInformation
# Suppression des guillemets dans le fichier csv
$delguill = Get-Content C:\script\temp.csv | Foreach {$_ -replace '\"',''}
$delguill > C:\script\temp.csv
# Suppresion de la ligne contenant les virgules du fichier d'origine
$delvirgule = get-content C:\script\temp.csv | where {$_ -notmatch \",,,\"}
$delvirgule > C:\script\temp.csv
# Insertion du nom de la personne en fonction du hostname
#Import-Csv C:\script\temp.csv -Delimiter ',' | % { $_.ip = $_.ip+\",test\" ; $_} | Export-Csv C:\script\temp2.csv -Delimiter ',' -NoTypeInformation
$impextractfile | Select-Object date, time, hostname, @{Label='username';Expression={$srch_username.\"$($_.hostname)\"}}, ip | Export-CSV C:\script\temp2.csv -NoTypeInformation
# Suppression des guillemets dans le fichier csv
$delguillbis = Get-Content C:\script\temp2.csv | Foreach {$_ -replace '\"',''}
$delguillbis > C:\script\temp2.csv
# Suppresion de la ligne contenant les virgules du fichier d'origine
$delvirgulebis = get-content C:\script\temp2.csv | where {$_ -notmatch \",,,\"}
$delvirgulebis > C:\script\temp2.csv
[/code:1]
4 - Voici ce que j'obtiens dans le fichier extract_dhcp.csv
[code:1]
nevent,date,time,event,ip,hostname,mac
11,06/30/11,08:01:27,Renew,192.168.153.52,PC4500.entreprise.fr,F04DA27E5292,
[/code:1]
5 - Voici ce que j'obtiens dans le fichier temp.csv
[code:1]
date,time,hostname,ip
06/30/11,08:01:27,PC4500.entreprise.fr,192.168.153.52
[/code:1]
6 - Voici ce que j'obtiens dans le fichier temp2.csv
[code:1]
date,time,hostname,username,ip
06/30/11,08:01:27,PC4500.entreprise.fr,,192.168.153.52
[/code:1]
Dans ce fichier, j'ai bien deux virgules successives entre le hostname et l'ip mais le username Christian PELOUSE n'apparait pas<br><br>Message édité par: shellfree, à: 18/07/11 10:47
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 14 ans 8 mois #9931
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Traitement des logs dhcp de windows
D'accord je viens de comprendre !
Pour que ma technique fonctionne, il faudrait que dans le username_table.csv on est une forme comme celle-ci :
[code:1]
PC4500.entreprise.fr;Christian PELOUSE
[/code:1]
Sinon, il faut que je prenne le temps de voir un autre algo ou voir celui de Laurent.
Bien Cordialement,
Richard Lazaro.
Pour que ma technique fonctionne, il faudrait que dans le username_table.csv on est une forme comme celle-ci :
[code:1]
PC4500.entreprise.fr;Christian PELOUSE
[/code:1]
Sinon, il faut que je prenne le temps de voir un autre algo ou voir celui de Laurent.
Bien Cordialement,
Richard Lazaro.
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Dada
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 14 ans 8 mois #9932
par Dada
Réponse de Dada sur le sujet Re:Traitement des logs dhcp de windows
Merci (avec un grand M) Messieurs, le problème venait bien du fait que je ne mentionnais pas le nom fqdn.
Maintenant que le script fonctionne aux petits oignons, je pousse le bouchon un petit peu plus loin :
- Je souhaite intégrer l'inscription du site en 6ème colonne en fonction des 3 premiers octets de l'IP. Ceci grâce à un fichier \"sites_table.csv\" dont la première colonne serait les 3 premiers octets et la seconde colonne serait le nom du site.
Le code serait : Si les 3 premiers octets de la colonne \"ip\" de mon fichier \"temp2.csv\" correspondent à une ligne de mon fichier \"sites_table.csv\" alors j'affiche le nom du site qui correspond.
- Actuellement tous les users sont dans le même fichier de log. Je souhaiterais créer un fichier de logs par utilisateur. Pensez-vous que c'est compliqué ? Si c'est trop complexe, je lâche cette idée.
Maintenant que le script fonctionne aux petits oignons, je pousse le bouchon un petit peu plus loin :
- Je souhaite intégrer l'inscription du site en 6ème colonne en fonction des 3 premiers octets de l'IP. Ceci grâce à un fichier \"sites_table.csv\" dont la première colonne serait les 3 premiers octets et la seconde colonne serait le nom du site.
Le code serait : Si les 3 premiers octets de la colonne \"ip\" de mon fichier \"temp2.csv\" correspondent à une ligne de mon fichier \"sites_table.csv\" alors j'affiche le nom du site qui correspond.
- Actuellement tous les users sont dans le même fichier de log. Je souhaiterais créer un fichier de logs par utilisateur. Pensez-vous que c'est compliqué ? Si c'est trop complexe, je lâche cette idée.
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 14 ans 8 mois #9933
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Traitement des logs dhcp de windows
Si on se base sur le même principe que pour le hostname/username.
Il va être possible de récupérer les trois premiers \"octets\" de ta chaîne de caractère comme cela :
[code:1]
$ip = '10.42.0.1'
$ofs = '.'
\"$($ip.Split('.')[0..2])\"
[/code:1]
C'est peut être possible avec la classe IPAddress du framework .Net, mais j'ai pas trop le temps de regarder de ce côté.
Bien Cordialement,
Richard Lazaro.
Il va être possible de récupérer les trois premiers \"octets\" de ta chaîne de caractère comme cela :
[code:1]
$ip = '10.42.0.1'
$ofs = '.'
\"$($ip.Split('.')[0..2])\"
[/code:1]
C'est peut être possible avec la classe IPAddress du framework .Net, mais j'ai pas trop le temps de regarder de ce côté.
Bien Cordialement,
Richard Lazaro.
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Dada
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 14 ans 8 mois #9934
par Dada
Réponse de Dada sur le sujet Re:Traitement des logs dhcp de windows
Je vais arrêter là car je n'ai pas trop le temps de m'y attarder.
Par contre juste une chose, je souhaiterais juste que dans le temp2.csv, les nouveaux logs qui arriveront cahque jour, ne vienne pas écraser les logs de la veille mais qu'il viennent s'y ajouter dessous.
Est-ce possible avec l'export ou faut-il créer un nouveau fichier de transition et utiliser le >>
Par contre juste une chose, je souhaiterais juste que dans le temp2.csv, les nouveaux logs qui arriveront cahque jour, ne vienne pas écraser les logs de la veille mais qu'il viennent s'y ajouter dessous.
Est-ce possible avec l'export ou faut-il créer un nouveau fichier de transition et utiliser le >>
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.046 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Traitement des logs dhcp de windows