2009-05-15 5 views
1

Je crée un script pour lire le journal de sécurité à partir de plusieurs ordinateurs. Je peux lire le journal de sécurité de ma machine locale sans problème lorsque j'utilise la commande Get-EventLog, mais le problème est que je ne peux pas l'exécuter sur une machine distante (le script est pour powershell v1). La commande ci-dessous ne renvoie aucun résultat, bien qu'avec n'importe quel autre LogFile, cela fonctionne parfaitement:Utilisation de PowerShell et de WMI pour lire le journal de sécurité

gwmi -Class Win32_NTLogEvent | où {$ _. « Sécurité » -eq LogFile}

Je l'ai fait quelques recherches, et je semble être un problème de l'usurpation d'identité, mais l'option -Impersonation pour le Get-WmiObject ne semble pas être mis en œuvre . Y at-il de toute façon autour de ce problème? La solution peut exécuter le Get-EventLog sur une machine distante en quelque sorte, ou traiter le problème d'emprunt d'identité afin que le journal de sécurité soit accessible. Merci

Répondre

3

Vous pouvez utiliser .NET directement au lieu de passer par WMI. Le script ci-dessous vous donnera la première entrée dans le journal de sécurité

$logs = [System.Diagnostics.EventLog]::GetEventLogs('computername') 
$security = $logs | ? {$_.log -like 'Security'} 
$security.entries[0] 
+0

Fonctionne comme un charme! Merci – Pascal

1

Avez-vous essayé d'utiliser le paramètre -Credential? En outre, utilisez le paramètre filter à la place de where-object, il récupère uniquement les événements de sécurité (where-object récupère TOUS les événements de tous les journaux et effectue ensuite le filtrage uniquement)

gwmi Win32_NTLogEvent -filter "LogFile = 'Security'" -computer comp1, comp2 -credential domain \ user

+0

Merci pour la pointe du filtre. Tu as complètement raison. En ce qui concerne l'utilisation des informations d'identification, je suis administrateur local, et même l'extraction du journal des événements de sécurité locale ne fonctionne pas. – Pascal

+0

pour V2 il y a un commutateur -EnableAllPrivileges: gwmi Win32_NTLogEvent -filter "LogFile = 'Sécurité'" -EnableAllPrivileges –