Question Traitement des logs dhcp de windows

Plus d'informations
il y a 14 ans 8 mois #9913 par Laurent Dardenne
Salut,
shellfree écrit:

Habituellement, ce type d'échange fonctionne plutôt bien...

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.
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:

Bref, n'allez surtout pas croire que je me croise les pouces en attendant qu'une solution tombe du ciel.

Bah ça va mieux en le disant :-).
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

Tutoriels PowerShell

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

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

Plus d'informations
il y a 14 ans 8 mois #9922 par Laurent Dardenne
shellfree écrit:

Et bien, maintenant que je connais vos moeurs,

Il ne s'agit que des miennes :)

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)]&gt; c:\temp\data.csv
$Objets=Import-Csv C:\temp\data.csv -Delimiter \&quot;,\&quot;
[/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.

Plus d'informations
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 \&quot;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 \&quot;usernames_table.csv\&quot;
$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\&quot;
#$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 += @{\&quot;$($_.split(';')[0])\&quot; = \&quot;$($_.split(';')[1])\&quot;} }

# Déclaration du chemin contenant les logs dhcp
$dhcplogpath = \&quot;C:\windows\system32\dhcp\&quot;

# Déclaration du fichier contenant le résultat de l'extraction
$extractfile = \&quot;C:\script\extract_dhcp.csv\&quot;

# 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
\&quot;nevent,date,time,event,ip,hostname,mac\&quot; &gt; $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 &gt;&gt; $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 '\&quot;',''}
$delguill &gt; C:\script\temp.csv

# Suppresion de la ligne contenant les virgules du fichier d'origine
$delvirgule = get-content C:\script\temp.csv | where {$_ -notmatch \&quot;,,,\&quot;}
$delvirgule &gt; C:\script\temp.csv

# Insertion du nom de la personne en fonction du hostname
#Import-Csv C:\script\temp.csv -Delimiter ',' | % { $_.ip = $_.ip+\&quot;,test\&quot; ; $_} | 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 '\&quot;',''}
$delguillbis &gt; C:\script\temp2.csv

# Suppresion de la ligne contenant les virgules du fichier d'origine
$delvirgulebis = get-content C:\script\temp2.csv | where {$_ -notmatch \&quot;,,,\&quot;}
$delvirgulebis &gt; 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.

Plus d'informations
il y a 14 ans 8 mois #9926 par Laurent Dardenne
shellfree écrit:

Voyez-vous ce qui cloche ?

Essaie ceci :
[code:1]
@{Label='username';Expression={$srch_username.\&quot;$($_.hostname)\&quot;}}
[/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)] &gt; $OutputFile
Get-ChildItem $OutputFile
}

$hosts=@{Srv1=\&quot;User1\&quot;;'CPRO012.entreprise.com'=\&quot;user2\&quot;;'tpichnaud.'=\&quot;user3\&quot;}

ConvertTo-CSV \&quot;c:\temp\datadhcp.txt\&quot; \&quot;c:\temp\data.csv\&quot;|
Import-Csv -Delimiter \&quot;,\&quot;|
Where-Object {$_.\&quot;Host Name\&quot; -ne [string]::Empty}|
Foreach-Object {
$Key=$_.\&quot;Host Name\&quot;
if ($hosts.$Key -ne $null)
{
$Value=$hosts.\&quot;$Key\&quot;
Write-Debug \&quot;Clé = $key Value=$Value\&quot;
$_ }
else {Write-Debug \&quot;$Key correspondance inexistante.\&quot;}
}|
Select-Object Date, Time, \&quot;Host Name\&quot;,@{Label='username';Expression={$Value}}, \&quot;Ip Address\&quot; |
Export-CSV \&quot;c:\temp\dhcpUsers.csv\&quot; -NoTypeInformation

$UsersInfo =Import-CSV \&quot;c:\temp\dhcpUsers.csv\&quot;
$UsersInfo
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
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
Propulsé par Kunena