Question
Traitement des logs dhcp de windows
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 8 mois #9913
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Traitement des logs dhcp de windows
Salut,
shellfree écrit:
Et ici aussi il s'agit d'échanges,difficile d'échanger quand on ne dit rien, même s'ils ne répondaient pas directement à ta demande.
shellfree écrit:
.
Et pourquoi, si comme tu le dis, tu as l'habitude de fréquenter les forums, ne pas préciser ton intention dés ton premier post ?
Ceci dit, côté specs, j'ai connu pire
<br><br>Message édité par: Laurent Dardenne, à: 13/07/11 22:23
shellfree écrit:
Ici, et dans ce cas, il y en a au moins deux qui on prit la peine de te signifier que ton premier post posait pb dans sa forme.Habituellement, ce type d'échange fonctionne plutôt bien...
Et ici aussi il s'agit d'échanges,difficile d'échanger quand on ne dit rien, même s'ils ne répondaient pas directement à ta demande.
shellfree écrit:
Bah ça va mieux en le disantBref, n'allez surtout pas croire que je me croise les pouces en attendant qu'une solution tombe du ciel.
Et pourquoi, si comme tu le dis, tu as l'habitude de fréquenter les forums, ne pas préciser ton intention dés ton premier post ?
Ceci dit, côté specs, j'ai connu pire
Tutoriels PowerShell
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 #9917
par Dada
Réponse de Dada sur le sujet Re:Traitement des logs dhcp de windows
Et bien, maintenant que je connais vos moeurs, j'irai piano lors de mes prochains posts.
<br><br>Message édité par: shellfree, à: 14/07/11 13:23
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 8 mois #9922
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Traitement des logs dhcp de windows
shellfree écrit:

Quant à ton pb, je ne comprend pas pourquoi vous ne passez pas par la construction d'objets :
[code:1]
$T=gc c:\temp\datadhcp.txt
$T[28..($T.count)]> c:\temp\data.csv
$Objets=Import-Csv C:\temp\data.csv -Delimiter \",\"
[/code:1]
Car PS propose de nombreux cmdlets basés objets :
[code:1]gcm -noun object[/code:1]
Qui, il me semble, simplifieraient ce traitement.
Il ne s'agit que des miennesEt bien, maintenant que je connais vos moeurs,
Quant à ton pb, je ne comprend pas pourquoi vous ne passez pas par la construction d'objets :
[code:1]
$T=gc c:\temp\datadhcp.txt
$T[28..($T.count)]> c:\temp\data.csv
$Objets=Import-Csv C:\temp\data.csv -Delimiter \",\"
[/code:1]
Car PS propose de nombreux cmdlets basés objets :
[code:1]gcm -noun object[/code:1]
Qui, il me semble, simplifieraient ce traitement.
Tutoriels PowerShell
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 #9925
par Dada
Réponse de Dada sur le sujet Re:Traitement des logs dhcp de windows
Tout d'abord, merci de ne pas lâcher mon post.
Pour l'objet, c'est peut-être parce que je suis un newbie en programmation et que je ne connais rien à la construction d'objets
Bon, voilà où j'en suis, j'ai combiner mon script d'origine avec l'ajout de colonne username de Richard.
Ca me donne bien une 4ème colonne \"username qui s'affiche. Sur cahque ligne j'ai une séparation d'une virgule qui s'ajoute mais aucune donnée n'apparait. Voici ce que j'obtiens dans le fichier final :
[code:1]
date,time,hostname,username,ip
06/30/11,08:01:27,VTR52.entreprise.fr,,192.168.99.129
[/code:1]
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]
J'ai testé la déclaration de la variable $srch_username et les données s'affichent correctemeent. Donc cette ligne de code est OK.
Cela vient donc forcément de la ligne
[code:1]@{Label='username';Expression={$srch_username[$_.hostname]}} [/code:1]
Voyez-vous ce qui cloche ?<br><br>Message édité par: shellfree, à: 17/07/11 19:11
Pour l'objet, c'est peut-être parce que je suis un newbie en programmation et que je ne connais rien à la construction d'objets
Bon, voilà où j'en suis, j'ai combiner mon script d'origine avec l'ajout de colonne username de Richard.
Ca me donne bien une 4ème colonne \"username qui s'affiche. Sur cahque ligne j'ai une séparation d'une virgule qui s'ajoute mais aucune donnée n'apparait. Voici ce que j'obtiens dans le fichier final :
[code:1]
date,time,hostname,username,ip
06/30/11,08:01:27,VTR52.entreprise.fr,,192.168.99.129
[/code:1]
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]
J'ai testé la déclaration de la variable $srch_username et les données s'affichent correctemeent. Donc cette ligne de code est OK.
Cela vient donc forcément de la ligne
[code:1]@{Label='username';Expression={$srch_username[$_.hostname]}} [/code:1]
Voyez-vous ce qui cloche ?<br><br>Message édité par: shellfree, à: 17/07/11 19:11
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 8 mois #9926
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Traitement des logs dhcp de windows
shellfree écrit:
[code:1]
@{Label='username';Expression={$srch_username.\"$($_.hostname)\"}}
[/code:1]
Sinon une autre approche d'une partie du pb :
[code:1]
function ConvertTo-CSV {
param([string] $InputFile,[string] $OutputFile)
$T=Get-Content $InputFile
$T[29..($T.count)] > $OutputFile
Get-ChildItem $OutputFile
}
$hosts=@{Srv1=\"User1\";'CPRO012.entreprise.com'=\"user2\";'tpichnaud.'=\"user3\"}
ConvertTo-CSV \"c:\temp\datadhcp.txt\" \"c:\temp\data.csv\"|
Import-Csv -Delimiter \",\"|
Where-Object {$_.\"Host Name\" -ne [string]::Empty}|
Foreach-Object {
$Key=$_.\"Host Name\"
if ($hosts.$Key -ne $null)
{
$Value=$hosts.\"$Key\"
Write-Debug \"Clé = $key Value=$Value\"
$_ }
else {Write-Debug \"$Key correspondance inexistante.\"}
}|
Select-Object Date, Time, \"Host Name\",@{Label='username';Expression={$Value}}, \"Ip Address\" |
Export-CSV \"c:\temp\dhcpUsers.csv\" -NoTypeInformation
$UsersInfo =Import-CSV \"c:\temp\dhcpUsers.csv\"
$UsersInfo
[/code:1]
Essaie ceci :Voyez-vous ce qui cloche ?
[code:1]
@{Label='username';Expression={$srch_username.\"$($_.hostname)\"}}
[/code:1]
Sinon une autre approche d'une partie du pb :
[code:1]
function ConvertTo-CSV {
param([string] $InputFile,[string] $OutputFile)
$T=Get-Content $InputFile
$T[29..($T.count)] > $OutputFile
Get-ChildItem $OutputFile
}
$hosts=@{Srv1=\"User1\";'CPRO012.entreprise.com'=\"user2\";'tpichnaud.'=\"user3\"}
ConvertTo-CSV \"c:\temp\datadhcp.txt\" \"c:\temp\data.csv\"|
Import-Csv -Delimiter \",\"|
Where-Object {$_.\"Host Name\" -ne [string]::Empty}|
Foreach-Object {
$Key=$_.\"Host Name\"
if ($hosts.$Key -ne $null)
{
$Value=$hosts.\"$Key\"
Write-Debug \"Clé = $key Value=$Value\"
$_ }
else {Write-Debug \"$Key correspondance inexistante.\"}
}|
Select-Object Date, Time, \"Host Name\",@{Label='username';Expression={$Value}}, \"Ip Address\" |
Export-CSV \"c:\temp\dhcpUsers.csv\" -NoTypeInformation
$UsersInfo =Import-CSV \"c:\temp\dhcpUsers.csv\"
$UsersInfo
[/code:1]
Tutoriels PowerShell
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 #9928
par Dada
Réponse de Dada sur le sujet Re:Traitement des logs dhcp de windows
Ta première solution ne fonctionne pas mieux.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.047 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Traitement des logs dhcp de windows