Question Get-RemoteLog

Plus d'informations
il y a 16 ans 1 mois #1684 par maycry
Get-RemoteLog a été créé par maycry
:P Voici suite à une mise a jour de mon script requise pour l'un de mes serveurs étant hors domaine

LE EDGE de exchange 2007:

J'ai m'adapter à l'aide de CREDENTIAL et donc modifier la version actuelle:

Basé sur le script de spirit pour la fonction Get-Email
j'ai conçu un petit script que je vous psoterai ce week-end

Description:

1==>change le titre de la console meilleur vision( oui ce script est concçu pour être allumé constamment)

2==>Authentification à l'aide de get-credential

3==>Définir votre commande get-remotelog -server .... -Logfile .... -Interval .....

4==>Définir vos variables pour les différents événements /warning/error/ le log temporaire de vos fichier log permettant ddêtre envoyé par mail dans le CORPS DU MESSAGE:

5==>Planifier vos conditions pour l'envoi de mail si un event est detecté:

6==> introduire la fonction get-EMail -server .... -to ... -from .....

7==> Définir le DELAI de votre boucle en fonction de l'interval de temps ou les log seront check


A noter que la commande start-SLEEP est utilisé pour la boucle de temps, car utilisé [datetime] utilise trop deressource CPU soit 100% pour 30sec de délai ( testé uniquement sur ma machine) AMD 64 3500+

Sur mon DELL coreduo T2300 une boucle de cpu de 30sec prend rien en ressources cpu bizzare donc la raison du sleep dans mon cas !!!


Le script sera dispo ce week:cheer:

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

Plus d'informations
il y a 16 ans 1 mois #1691 par maycry
Réponse de maycry sur le sujet Re:Get-RemoteLog
Voili le script ^^^^

Le résultat en sortie peut être modifié ^^
L'heure de l'événement est manquant car j'ai pas eu le temps de faire la conversion en heure normal disons ^^

[code:1]#######################################################

##################################################################################
# Version 1.0 : -- Stable Optimisé
##################################################################################
# Get-WmiRemoteLog.ps1
#************************************************************************

#####################################################################################################################
# Fonction : Script pour filtré et scruté les eventslogs à distance sur les machines non inclus dans un domaine
#####################################################################################################################
#DESCRIPTION DÉTAILLÉE:
#Obtient des informations à propos des journaux des événements locaux ou des entrées stockées dans ces journaux
#des événements de logs de type ERROR sur l'emsemble des serveurs du domaine.
#####################################################################################################################

#****************************#
# Connexion sécurisé #
#****************************#

$cred = get-Credential # ou on anticipe l'utilisateur aveec \"HUBGROUP\Adminis\"

#****************************#
# TITRE DE LA CONSOLE #
#****************************#
function Get-InputBox
{
param ([string]$Message, [string]$Title)

$a = new-object -comobject MSScriptControl.ScriptControl
$a.language = \"vbscript\"
$a.addcode(\"function getInput() getInput = inputbox(`\"$Message`\",`\"$Title`\"«») end function\"«»)
$InputTitle = $a.eval(\"getInput\"«»)
$Host.UI.RawUI.WindowTitle = \"$InputTitle\"
}

get-inputbox -Message \"Veuillez entrez un Titre dédié à la Console afin de la distinguer.\" -Title \"Wizzard Title Console\"




#########################################################################
#|
| |
#|**********************GET-EMAIL*********************| |
#|####################################################| |
#| # ** Function: ** # | |
#| # ** Envoi d'email ** # | |
#|
| |
#########################################################################

################## Information des paramétres pour l'envoi de mail PAR POWERSHELL ##############################################################|
#$Server = \"MyServeurSMTP\" |
#$From = \"Emetteur@domaine.com\" |
#$To = \"Destinataire@domaine.com\" #,\"Destinataire2@domaine.com\" |
#$Subject = \"Mail de Test PowerShell\" |
#$Body = \"TEXTE SOUHAITE ,\"<FILE>C:\boot.ini\",(Get-Content -Path C:\fichier_a_integre_dans_lecorps | ForEach-Object {$_ + \"`n\"}) |
################################################################################################################################################|
function Get-Email
{
param ([string]$Server, [string]$From, [string]$To, [string]$Subject, [string]$Body, [string]$Attach)


###########################
# Constitution du message #
###########################
#****************************#
# Déclaration des éléments #
# Server/TO/Subject/From #
#****************************#
$Email_Client = New-Object System.Net.Mail.SmtpClient
$Email_Client.Host = $Server
$Email_Client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials
$Email_Message = New-Object System.Net.Mail.MailMessage
$Email_Message.From = $From
$Email_Message.Subject = $Subject


$Email_Adresses = $Email_Message.To
if ($To -is \"System.Array\"«»)
{
foreach ($Adr in $To)
{
$Email_Adress = New-Object System.Net.Mail.MailAddress $Adr
$Email_Adresses.Add($Email_Adress)
}
}
else
{
$Email_Adress = New-Object System.Net.Mail.MailAddress $To
$Email_Adresses.Add($Email_Adress)
}

$WorkBody = \"\"
if ($Body -is \"System.Array\"«»)
{
foreach ($Elt in $Body)
{
if ($Elt -like \"<FILE>*\"«»)
{
$File = $Elt.SubString(6,$Elt.Length-6)
$WorkBody += \"`n\" + (Get-Content -Path $File)
}
else
{
$WorkBody += \"`n\" + $Elt
}
}
}
else
{
if ($Body -like \"<FILE>*\"«»)
{
$File = $Body.SubString(6,$Body.Length-6)
$WorkBody = Get-Content -Path $File
}
else
{
$WorkBody = $Body
}
}


$Email_Message.Body = $WorkBody


#****************************#
# OPTIONNEL #
# Piece jointe #
#****************************#
if ($Attach -eq $null)
{}
{
$Email_Attachments = $Email_Message.Attachments
{
if ($Attach -is \"System.Array\"«»)
{
foreach ($Elt in $Attach)
{
if ($Elt -like \"<REP>*\" )
{
$Dir = $Elt.SubString(5,$Elt.Length-5)
foreach ($File in (Get-ChildItem -Path $Dir -Include \"*.*\" -Name))
{
$File = $Dir + $File
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
else
{
$File = $Elt
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
}

else
{
if ($Attach -like \"<REP>*\" )
{
$Dir = $Attach.SubString(5,$Attach.Length-5)
foreach ($File in (Get-ChildItem -Path $Dir -Include \"*.*\" -Name))
{
$File = $Dir + $File
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}

else
{
$File = $Attach
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
}
}

####################################
# Quelle epopee, enfin on envoi !! #
####################################

$Email_Client.Send($Email_Message)

}
####################################
# Fin de la fonction Accolade !! #
####################################
#*###################################################################################################



#########################################################################
#|
| |
#|******************GET-WmiREMOTE LOG*****************| |
#|####################################################| |
#| # ** Function: ** # | |
#| # ** Récupération des logs** # | |
#| # ** sur machine distante ** # | |
#|
| |
#########################################################################

################## Information des paramétres pour la requête de récuépration d'événement PAR POWERSHELL ########################################|
#$Server = \"SERVEUR\" |
#$Interval = \"-10 ou +10\" <<<<=== Exprimé en minutes |
#$Type = \"Information /Warning /Error\" LE type d'énévement désiré |
#$LogFile = Application /SYSTEM ....\" Type d'événément |
#################################################################################################################################################|
function Get-WmiRemoteLog
{
param ([string]$Server, [string]$Interval, [string]$Type, [string]$LogFile)

##############################
### Infos Général ###
##############################
$Date = [datetime]::Now # Date du jour
$DateDMTF = [System.Management.ManagementDateTimeConverter]::ToDMTFDateTime($Date.AddMinutes($Interval)) # date généré et convertit utilisé par WMI + valeur de temps à check
$Server = \"Edge\"

#
|
# JOURNAL D EVENEMENT ==> |
#
# |
# **Mise en place du script**# |
# ** Récupération des logs** # |
#
# |

# Requête filtré pour le type d'évenement Warning
$Query = \"Select LogFile,TimeGenerated,EventIdentifier,Type,EventCode,Message from Win32_NTLogevent Where (Type= '$Type') AND TimeGenerated >='$DateDMTF'\"
$Result = Get-WmiObject -computer $Server -Credential $Cred -query $Query | Where-Object {$_.LogFile -eq \"$LogFile\" } | Format-list -property LogFile,Type,EventCode,Message

$Result
}
####################################
# Fin de la fonction Accolade !! #
####################################
####################################################################################################




#################################################################################################################################################|
# BOUCLAGE + itégration de fonctions EMAIL & REMOTELOG |
#################################################################################################################################################|

#****************************#
# DEBUT DE BOUCLE #
#****************************#
[System.Console]::TreatControlCAsInput = $TRUE
while ($TRUE)
{
#
#
# Instructions de requête #
#
#
$warning_app = Get-WmiRemoteLog -Server AdresseIP/NETBIOS -Interval \"-10\" -Type \"Warning\" -LogFile \"Application\"
$warning_sys = Get-WmiRemoteLog -Server AdresseIP/NETBIOS -Interval \"-10\" -Type \"Warning\" -LogFile \"system\"
$warning_mse = Get-WmiRemoteLog -Server AdresseIP/NETBIOS -Interval \"-10\" -Type \"Warning\" -LogFile \"ADAM (MSExchange)\"
$warning_ins = Get-WmiRemoteLog -Server AdresseIP/NETBIOS -Interval \"-10\" -Type \"Warning\" -LogFile \"ADAM (instance1)\"
$error_app = Get-WmiRemoteLog -Server AdresseIP/NETBIOS -Interval \"-10\" -Type \"Error\" -LogFile \"Application\"
$error_sys = Get-WmiRemoteLog -Server AdresseIP/NETBIOS -Interval \"-10\" -Type \"Error\" -LogFile \"system\"
$error_mse = Get-WmiRemoteLog -Server AdresseIP/NETBIOS -Interval \"-10\" -Type \"Error\" -LogFile \"ADAM (MSExchange)\"
$error_ins = Get-WmiRemoteLog -Server AdresseIP/NETBIOS -Interval \"-10\" -Type \"Error\" -LogFile \"ADAM (instance1)\"
$warning_sys_log = $warning_sys |out-File C:\chemin\warning_edge_sys.log
$warning_app_log = $warning_app |out-File C:\chemin\warning_edge_app.log
$warning_mse_log = $warning_mse |out-File C:\chemin\warning_edge_mse.log
$warning_ins_log = $warning_ins |out-File C:\chemin\warning_edge_ins.log
$error_app_log = $error_sys |out-File C:\chemin\error_edge_sys.log
$error_sys_log = $error_app |out-File C:\chemin\error_edge_app.log
$error_mse_log = $error_mse |out-File C:\chemin\error_edge_mse.log
$error_ins_log = $error_ins |out-File C:\chemin\error_edge_ins.log

#
#
# Instruction dans la boucle #
# On exécute les requetes #
#
#


#########Envoi de mail si log detecté ########
###################################################
########################################################
#
#
# MAIL WARNING #
#
#


if ($warning_app -eq $null) {}
else
{
Get-Email -Server AdresseIP/NETBIOS -From Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -To Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -Subject \"APPLICATION !Warning!\" -Body (Get-Content -Path C:\chemin\warning_edge_app.log | ForEach-Object {$_ + \"`n\"})
}


if ($warning_sys -eq $null) {}
else
{
Get-Email -Server AdresseIP/NETBIOS -From Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -To Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -Subject \"SYSTEM !Warning!\" -Body (Get-Content -Path C:\chemin\warning_edge_sys.log | ForEach-Object {$_ + \"`n\"})
}


if ($warning_mse -eq $null) {}
else
{
Get-Email -Server AdresseIP/NETBIOS -From Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -To Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -Subject \"ADAM(MSExchange) !Warning!\" -Body (Get-Content -Path C:\chemin\warning_edge_mse.log | ForEach-Object {$_ + \"`n\"})
}


if ($warning_ins -eq $null) {}
else
{
Get-Email -Server AdresseIP/NETBIOS -From Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -To Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -Subject \"ADAM(Instance) !Warning!\" -Body (Get-Content -Path C:\chemin\warning_edge_ins.log | ForEach-Object {$_ + \"`n\"})
}
#
#
# MAIL ERROR #
#
#

if ($error_app -eq $null) {}
else
{
Get-Email -Server AdresseIP/NETBIOS -From Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -To Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -Subject \"Application !!ERROR!!\" -Body (Get-Content -Path C:\chemin\error_edge_app.log | ForEach-Object {$_ + \"`n\"})
}


if ($error_sys -eq $null) {}
else
{
Get-Email -Server AdresseIP/NETBIOS -From Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -To Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -Subject \"System !!ERROR!!\" -Body (Get-Content -Path C:\chemin\error_edge_sys.log | ForEach-Object {$_ + \"`n\"})
}


if ($error_mse -eq $null) {}
else
{
Get-Email -Server AdresseIP/NETBIOS -From Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -To Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -Subject \"ADAM(MSExchange) !!ERROR!!\" -Body (Get-Content -Path C:\chemin\error_edge_mse.log | ForEach-Object {$_ + \"`n\"})
}


if ($error_ins -eq $null) {}
else
{
Get-Email -Server AdresseIP/NETBIOS -From Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -To Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. -Subject \"ADAM(Instance) !!ERROR!!\" -Body (Get-Content -Path C:\chemin\error_edge_ins.log | ForEach-Object {$_ + \"`n\"})
}

Remove-Item C:\chemin\*.log
#
#
# PARAMETRE DE BOUCLAGE #
#
#
$now = get-date
Write-Host \"\"
Write-Host \"
\"
Write-Host \"$now Action While on Running time 9min \" -foregroundcolor White -backgroundcolor Blue
Write-Host \"
\"
$endtime =Start-Sleep 540
while ((get-date) -le $endtime)
{
if ([System.Console]::KeyAvailable)
{
$key = [System.Console]::ReadKey($TRUE)

# intercepter CTRL+C :
if (($key.Modifiers -band [System.ConsoleModifiers]\"control\"«») -and ($key.Key -eq \"C\"«»))
{
# interrompre le script :
exit
} # fin du if (($key.Modifiers ...

# si autre touche, abr?ger l'attente :
else
{
break
}}}}

#****************************#
# FIN DE BOUCLE #
#****************************#[/code:1]
Message édité par: chris, à: 17/02/08 12:47

Message édité par: chris, à: 18/02/08 15:14<br><br>Message édité par: Arnaud, à: 18/02/08 21:19

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

Plus d'informations
il y a 16 ans 1 mois #1693 par Lemaire Patrice
Réponse de Lemaire Patrice sur le sujet Re:Get-RemoteLog
*Sort ses lorgnons et son livre de grec ancien*
Hum ... 5 jours et je vous traduit ca !!

Désolé ^^

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

Plus d'informations
il y a 16 ans 1 mois #1701 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Get-RemoteLog
Effectivement, vue la taille du script pourrais tu le mettre en pièce jointe stp ?

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 16 ans 1 mois #1702 par maycry
Réponse de maycry sur le sujet Re:Get-RemoteLog
:P No problémo je vais l'améliorer de toute façon ^^ enfin essayer ^^

et je le mettrai donc en pièce jointe alors ^^<br><br>Message édité par: chris, à: 18/02/08 23:11

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

Plus d'informations
il y a 16 ans 1 mois #1751 par maycry
Réponse de maycry sur le sujet Re:Get-RemoteLog
voici le script en version amélioré.

La pièce jointe get_RemoteLog.ps1 est absente ou indisponible

Pièces jointes :

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

Temps de génération de la page : 0.120 secondes
Propulsé par Kunena