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

10 réponses

1 2
Avatar
Jacques Barathon [MS]
"Robby" wrote in message
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

Avatar
Robby
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]" a écrit dans le
message de news: Og%
"Robby" wrote in message
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



Avatar
Gilles LAURENT [MVP]
"Robby" a écrit dans le message de
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
Avatar
Jacques Barathon [MS]
"Robby" wrote in message
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

Avatar
Robby
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]" a écrit dans le message de news:

"Robby" a écrit dans le message de
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




Avatar
Robby
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]" a écrit dans le
message de news: %
"Robby" wrote in message
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



Avatar
Jacques Barathon [MS]
"Robby" wrote in message
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

Avatar
F. Dunoyer [MVP]
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

Avatar
Jacques Barathon [MS]
"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
Robby
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



1 2