Script powershell fichier log.

Le
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
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacques Barathon [MS]
Le #691385
"Robby" news:
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


A priori très facile à faire. Je n'ai pas de fichier log d'IIS sous la main,
tu peux fournir quelques lignes en exemple?

Jacques

Robby
Le #691384
J'ai fait cela et ca fonctionne :
param ($IP = ".")
get-content "\monserveurW3SVC1ex071011.log" | select-string "$IP" >
result.txt

Mais je voudrais que se soit interactif comme avec une commande ECHO -n
Il y a aussi le pb que le fichier log change de nom en fonction de la date
du jour.

le debut du fichier log :
---------------------------
#Software: Microsoft Internet Information Services 5.1
#Version: 1.0
#Date: 2007-10-11 00:01:24
#Fields: time c-ip cs-method cs-uri-stem sc-status
00:01:24 192.168.1.178 GET /mrtg/index1.html 304
--------------------------------------------
Pourrais tu m'aider ?

Merci d'avance,

Robby

"Jacques Barathon [MS]" message de news: Og%
"Robby" news:
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


A priori très facile à faire. Je n'ai pas de fichier log d'IIS sous la
main, tu peux fournir quelques lignes en exemple?

Jacques



Gilles LAURENT [MVP]
Le #691383
"Robby" news:
| Bonjour,

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

--- CodeSnippet.ps1 ---
Param (
[String]$IPAddrs
)

$LogFile="ex"+$(Get-Date -uFormat "%y%m%d")+".log"
Get-Content $LogFile |
Select-String $IPAddrs |
ForEach-Object {
"$_".Substring(9,"$_".Length-12)
}
--- CodeSnippet.ps1 ---

Note: Le chemin du fichier log est à adapter. Actuellement le fichier
doit se situer dans le répertoire courant

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Jacques Barathon [MS]
Le #691381
"Robby" news:e%
J'ai fait cela et ca fonctionne :
param ($IP = ".")
get-content "\monserveurW3SVC1ex071011.log" | select-string "$IP" >
result.txt

Mais je voudrais que se soit interactif comme avec une commande ECHO -n
Il y a aussi le pb que le fichier log change de nom en fonction de la date
du jour.

le debut du fichier log :
---------------------------
#Software: Microsoft Internet Information Services 5.1
#Version: 1.0
#Date: 2007-10-11 00:01:24
#Fields: time c-ip cs-method cs-uri-stem sc-status
00:01:24 192.168.1.178 GET /mrtg/index1.html 304
--------------------------------------------
Pourrais tu m'aider ?


Pour le fichier log du jour, voir le script fourni par Gilles. Pour
l'interactivité, un read-host devrait faire l'affaire. Les deux combinés, ça
donne qq chose comme ça:

# --- get-iislog.ps1 ---
param ([string]$ip = "127.0.0.1")

$LogFile="ex"+$(Get-Date -uFormat "%y%m%d")+".log"

while ($true)
{
Get-Content $LogFile | Select-String $ip
$ip = Read-Host -Prompt "Entrez une adresse IP ou pressez CTRL+C pour
quitter"
}
# --- fin du script ---

Tu devrais pouvoir broder à partir de ça pour obtenir le résultat final que
tu veux. Dans les optimisations possibles, tu pourrais charger le fichier en
mémoire avant de commencer la boucle interactive. Ca évitera de recharger le
fichier à chaque fois à partir du disque dur. Il y a également moyen
d'améliorer l'affichage.

Jacques

Robby
Le #691079
Bonjour Gilles,

Merci pour ton SUPER script, ca fonctionne.
Pourrais-tu m'expliquer un peu ce qu'il fait.
Par ex: ForEach-Object {
"$_".Substring(9,"$_".Length-12)
Encore merci,

Robby

"Gilles LAURENT [MVP]"
"Robby" news:
| Bonjour,

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

--- CodeSnippet.ps1 ---
Param (
[String]$IPAddrs
)

$LogFile="ex"+$(Get-Date -uFormat "%y%m%d")+".log"
Get-Content $LogFile |
Select-String $IPAddrs |
ForEach-Object {
"$_".Substring(9,"$_".Length-12)
}
--- CodeSnippet.ps1 ---

Note: Le chemin du fichier log est à adapter. Actuellement le fichier
doit se situer dans le répertoire courant

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr




Robby
Le #691078
Bonjour Jacques,
voila mon script qui fonctionne:
Param ([String]$IP="127.0.0.1")
$ip = Read-Host -Prompt "Entrez une adresse IP ou pressez CTRL+C pour
quitter"
while ($true)
{
$LogFile="ex"+$(Get-Date -uFormat "%y%m%d")+".log"
Get-Content "\infoxpW3SVC1$LogFile" |
Select-String $IP >> resultatIP.txt
}

MAIS il y a 2 choses qui ne vont pas, je voudrais que mon script revienne
sur le prompt alors que je suis obligé de faire crtl-c. j'ai essayé avec
DONE à la fin du script mais KO.
le 2eme, c'est que je voudrais concerver le resultat precedent dans mon
fichier resultatIP.
j'ai essayé avec >> mais ca met les enregistrements en double.
Merci d'avance,
Robby

"Jacques Barathon [MS]" message de news: %
"Robby" news:e%
J'ai fait cela et ca fonctionne :
param ($IP = ".")
get-content "\monserveurW3SVC1ex071011.log" | select-string "$IP" >
result.txt

Mais je voudrais que se soit interactif comme avec une commande ECHO -n
Il y a aussi le pb que le fichier log change de nom en fonction de la
date du jour.

le debut du fichier log :
---------------------------
#Software: Microsoft Internet Information Services 5.1
#Version: 1.0
#Date: 2007-10-11 00:01:24
#Fields: time c-ip cs-method cs-uri-stem sc-status
00:01:24 192.168.1.178 GET /mrtg/index1.html 304
--------------------------------------------
Pourrais tu m'aider ?


Pour le fichier log du jour, voir le script fourni par Gilles. Pour
l'interactivité, un read-host devrait faire l'affaire. Les deux combinés,
ça donne qq chose comme ça:

# --- get-iislog.ps1 ---
param ([string]$ip = "127.0.0.1")

$LogFile="ex"+$(Get-Date -uFormat "%y%m%d")+".log"

while ($true)
{
Get-Content $LogFile | Select-String $ip
$ip = Read-Host -Prompt "Entrez une adresse IP ou pressez CTRL+C pour
quitter"
}
# --- fin du script ---

Tu devrais pouvoir broder à partir de ça pour obtenir le résultat final
que tu veux. Dans les optimisations possibles, tu pourrais charger le
fichier en mémoire avant de commencer la boucle interactive. Ca évitera de
recharger le fichier à chaque fois à partir du disque dur. Il y a
également moyen d'améliorer l'affichage.

Jacques



Jacques Barathon [MS]
Le #691075
"Robby" news:%
Bonjour Jacques,
voila mon script qui fonctionne:
Param ([String]$IP="127.0.0.1")
$ip = Read-Host -Prompt "Entrez une adresse IP ou pressez CTRL+C pour
quitter"
while ($true)
{
$LogFile="ex"+$(Get-Date -uFormat "%y%m%d")+".log"
Get-Content "\infoxpW3SVC1$LogFile" |
Select-String $IP >> resultatIP.txt
}

MAIS il y a 2 choses qui ne vont pas, je voudrais que mon script revienne
sur le prompt alors que je suis obligé de faire crtl-c. j'ai essayé avec
DONE à la fin du script mais KO.


Dans le script que tu as recopié ci-dessus, le prompt n'est proposé qu'une
fois pour toutes au début. C'est seulement après que le script attaque sa
boucle "while ($true)". La boucle est sans fin puisque le test $true est
toujours vrai par définition, donc en clair tu poses une fois la question
"Entrez une adresse IP..." puis tu boucles à l'infini sur la même extraction
de données. Il faut alors interrompre le processus avec CTRL+C.

Si tu veux 1) poser la question, 2) extraire les données correspondantes, et
3) reboucler sur 1, la version que je te proposais hier devrait convenir.
Sinon, explique-moi ce que tu veux faire, je ne comprends pas bien.

Au passage, tu peux également remettre la ligne $LogFile=etc avant la boucle
puisque, à moins que tu restes dans cette boucle autour de minuit, la valeur
de $LogFile n'a aucune raison de changer en cours de route. Ca fera
économiser quelques cycles de CPU à ton PC. :)

le 2eme, c'est que je voudrais concerver le resultat precedent dans mon
fichier resultatIP.
j'ai essayé avec >> mais ca met les enregistrements en double.


La démarche est pourtant bonne. Mais à mon avis, corrige déjà le problème de
boucle comme signalé plus haut et ça ira mieux.

Jacques

F. Dunoyer [MVP]
Le #697487
Robby a formulé la demande :
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


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

il y'a meme des exemples dans le script center

exemple :
http://www.hotline-pc.org/scripting/logparser.html

--
François Dunoyer [MVP Windows Server / Security]
Quelques liens pour Windows : http://fds.mvps.org/AdressesInternets.htm
Site perso : http://www.fdunoyer.net

Jacques Barathon [MS]
Le #697269
"F. Dunoyer [MVP]" 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

Robby
Le #696768
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]" message de news: %237m$
"F. Dunoyer [MVP]" 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



Publicité
Poster une réponse
Anonyme