Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Script powershell fichier log.

16 réponses
Avatar
Robby
Bonjour,

Sur un serveur IIS, j'aimerai eplucher le LOG à la date du jour, en faisant
resortir comme
resultat, l'adresse IP et le champ URL.
En tapant mon IP en Echo, l'ouput searit par exemple:
192.168.1.45 get www.google.fr/recherche/toto
Merci d'avance,
Robby

6 réponses

1 2
Avatar
Robby
En faite, je me suis trompe, je voudrais la possibilité
d'entrée aussi la date comme pour l'adresse ip.
Encore merci,
Robby.

"Robby" a écrit dans le message de news:

Merci, Jacques mais plus precisement ???
La roue, elle existe deja, moi j'aimerais autre chose.
Est-ce possible ?
Consulter le LOG du jour et dans le fichier de resultat champ IP URL ?
Merci d'avance,
Robby.

"Jacques Barathon [MS]" a écrit dans le
message de news: %237m$
"F. Dunoyer [MVP]" ~.net> wrote in message
news:
...
AVant de réinventer la roue, regarde l'outil logparser de chez krosoft
:)

http://www.microsoft.com/downloads/details.aspx?FamilyID‰0cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en



La syntaxe get-content ... | select-string ... est assez loin de
l'invention de la roue. :-)

Jacques







Avatar
Jacques Barathon [MS]
"Robby" wrote in message
news:%
En faite, je me suis trompe, je voudrais la possibilité
d'entrée aussi la date comme pour l'adresse ip.
Encore merci,
Robby.


Version basique, non testée. Si tu veux pouvoir utiliser des expressions
régulières dans ta saisie de l'adresse et/ou de la date, remplace
l'opérateur -like par -match:

# --- get-iislog.ps1 ---
param ($logfile)

while ($true)
{
$ip = Read-Host -Prompt "Entrez une adresse IP"
$date = Read-Host -Prompt "Entrez une date"
Get-Content $LogFile | where {$_ -like "*$ip*" and $_ -like "*$date*"}
}
# --- fin du script ---

Jacques

Avatar
Robby
Merci Jacques, moi j'ai fai ceci :
Param ([String]$IP="127.0.0.1") ([String]$LogFile=".")
$ip = Read-Host -Prompt "Entrez une adresse IP ou pressez CTRL+C pour
quitter"
$LogFile = Read-Host -Prompt "Entrez le fichier log"

while ($true)
{
Get-Content "infoxpW3SVC1$LogFile" |
Select-String $IP > resultatIP.txt
}
Qu'en penses tu ? pour moi ca fonctionne.
une dierniere chose, avec While (boucle), la boucle ne s'arrete jamais seule
?

"Jacques Barathon [MS]" a écrit dans le
message de news:
"Robby" wrote in message
news:%
En faite, je me suis trompe, je voudrais la possibilité
d'entrée aussi la date comme pour l'adresse ip.
Encore merci,
Robby.


Version basique, non testée. Si tu veux pouvoir utiliser des expressions
régulières dans ta saisie de l'adresse et/ou de la date, remplace
l'opérateur -like par -match:

# --- get-iislog.ps1 ---
param ($logfile)

while ($true)
{
$ip = Read-Host -Prompt "Entrez une adresse IP"
$date = Read-Host -Prompt "Entrez une date"
Get-Content $LogFile | where {$_ -like "*$ip*" and $_ -like "*$date*"}
}
# --- fin du script ---

Jacques



Avatar
Jacques Barathon [MS]
"Robby" wrote in message
news:%
Merci Jacques, moi j'ai fai ceci :
Param ([String]$IP="127.0.0.1") ([String]$LogFile=".")
$ip = Read-Host -Prompt "Entrez une adresse IP ou pressez CTRL+C pour
quitter"
$LogFile = Read-Host -Prompt "Entrez le fichier log"

while ($true)
{
Get-Content "infoxpW3SVC1$LogFile" |
Select-String $IP > resultatIP.txt
}
Qu'en penses tu ? pour moi ca fonctionne.


Même remarque que précédemment: la boucle n'est là que pour te permettre de
retaper une adresse IP pour faire une nouvelle recherche sans avoir à
relancer le script. En l'occurrence, tu fais la saisie avant la boucle,
cette boucle ne sert donc à rien.

Au fait, je n'avais pas encore relevé, mais il vaudrait mieux remplacer
get-content par get-childitem. Le select-string n'en sera que plus efficace.
Ou alors, tu peux simplement passer le nom du fichier log à select-string:

select-string $IP "infoxpW3SVC1$LogFile" > resultatIP.txt

Regarde l'aide en ligne de select-string pour plus d'infos (help
select-string -full).

une dierniere chose, avec While (boucle), la boucle ne s'arrete jamais
seule ?


C'est le but. La boucle sort quand la condition entre parenthèses n'est plus
vérifiée. Comme j'ai mis $true, cette condition est toujours vérifiée, la
boucle est donc infinie.

Jacques

Avatar
Robby
Merci jacques,
J'ai retire la boucle.
Mais quand je mets childitem dans mon fichier result j'ai la ligne de
commande infoxp..devant chaque ligne.

"Jacques Barathon [MS]" a écrit dans le
message de news: %
"Robby" wrote in message
news:%
Merci Jacques, moi j'ai fai ceci :
Param ([String]$IP="127.0.0.1") ([String]$LogFile=".")
$ip = Read-Host -Prompt "Entrez une adresse IP ou pressez CTRL+C pour
quitter"
$LogFile = Read-Host -Prompt "Entrez le fichier log"

while ($true)
{
Get-Content "infoxpW3SVC1$LogFile" |
Select-String $IP > resultatIP.txt
}
Qu'en penses tu ? pour moi ca fonctionne.


Même remarque que précédemment: la boucle n'est là que pour te permettre
de retaper une adresse IP pour faire une nouvelle recherche sans avoir à
relancer le script. En l'occurrence, tu fais la saisie avant la boucle,
cette boucle ne sert donc à rien.

Au fait, je n'avais pas encore relevé, mais il vaudrait mieux remplacer
get-content par get-childitem. Le select-string n'en sera que plus
efficace. Ou alors, tu peux simplement passer le nom du fichier log à
select-string:

select-string $IP "infoxpW3SVC1$LogFile" > resultatIP.txt

Regarde l'aide en ligne de select-string pour plus d'infos (help
select-string -full).

une dierniere chose, avec While (boucle), la boucle ne s'arrete jamais
seule ?


C'est le but. La boucle sort quand la condition entre parenthèses n'est
plus vérifiée. Comme j'ai mis $true, cette condition est toujours
vérifiée, la boucle est donc infinie.

Jacques



Avatar
Jacques Barathon [MS]
"Robby" wrote in message
news:
Merci jacques,
J'ai retire la boucle.
Mais quand je mets childitem dans mon fichier result j'ai la ligne de
commande infoxp..devant chaque ligne.


C'est vrai. Cette syntaxe étant plutôt utilisée pour parcourir plusieurs
fichiers, l'affichage par défaut ajoute le nom du fichier et le numéro de
ligne.

Tu peux garder la syntaxe avec get-content, ou tu peux également filtrer les
résultats pour n'afficher que l'information qui t'intéresse, à savoir la
ligne elle-même (sans le nom du fichier ni le numéro de la ligne):

get-childitem $logfile | select-string $ip | foreach {$_.line}

ou encore

select-string $ip $logfile | foreach {$_.line}

Jacques

1 2