Question Traitement des logs dhcp de windows

Plus d'informations
il y a 14 ans 8 mois #9929 par Richard Lazaro
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.

Plus d'informations
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

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

Plus d'informations
il y a 14 ans 8 mois #9931 par Richard Lazaro
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.

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.

Plus d'informations
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 \&quot;sites_table.csv\&quot; 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 \&quot;ip\&quot; de mon fichier \&quot;temp2.csv\&quot; correspondent à une ligne de mon fichier \&quot;sites_table.csv\&quot; 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.

Plus d'informations
il y a 14 ans 8 mois #9933 par Richard Lazaro
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 \&quot;octets\&quot; de ta chaîne de caractère comme cela :

[code:1]
$ip = '10.42.0.1'
$ofs = '.'
\&quot;$($ip.Split('.')[0..2])\&quot;
[/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.

Plus d'informations
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 &gt;&gt;

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

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