Utilisateur de Connexion/Déconnexion de l'Information à l'aide de Powershell
Je veux être en mesure de contrôler à distance l'ordinateur de l'utilisateur de connexion/déconnexion des sessions et des fois, et j'ai le code suivant que j'ai reçu de stackoverflow, mais je ne peux pas comprendre comment indiquer au script pour contrôler un ordinateur à distance:
$UserProperty = @{n="User";e={(New-Object System.Security.Principal.SecurityIdentifier
$_.ReplacementStrings[1]).Translate([System.Security.Principal.NTAccount])}}
$TypeProperty = @{n="Action";e={if($_.EventID -eq 7001) {"Logon"} else {"Logoff"}}}
$TimeProeprty = @{n="Time";e={$_.TimeGenerated}}
Get-EventLog System -Source Microsoft-Windows-Winlogon | select $UserProperty,$TypeProperty,$TimeProeprty
J'ai fait faire jeter dans un $Computername variable et une boucle Foreach de tresorerie comme dans la suite de l'essayer et de le faire fonctionner sur un ordinateur distant, mais il continue à vérifier le système local que je suis, pas le système à distance:
$Computername = Read-Host "Enter Computername Here"
Foreach $Computer in $Computername
{
$UserProperty = @{n="User";e={(New-Object System.Security.Principal.SecurityIdentifier $_.ReplacementStrings[1]).Translate([System.Security.Principal.NTAccount])}}
$TypeProperty = @{n="Action";e={if($_.EventID -eq 7001) {"Logon"} else {"Logoff"}}}
$TimeProeprty = @{n="Time";e={$_.TimeGenerated}}
Get-EventLog System -Source Microsoft-Windows-Winlogon | select $UserProperty,$TypeProperty,$TimeProeprty
}
- Juste l'ajout d'un commentaire que l'instruction foreach manque la parenthèse caractères. Devrait montrer que "Foreach ($Ordinateur en $Computername)" à la place.
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est une vieille question, mais aucune réponse n'a jamais été accepté. L'un des problèmes est que le script n'affiche pas l'ordinateur de l'utilisateur était connecté. De toute façon, je l'ai corrigé (y compris la faute de frappe).
Get-LogonHistory.ps1
:Avec cela, il affichera l'ordinateur de l'utilisateur connecté. Plusieurs ordinateurs distants peuvent être passés dans la ligne de commande avec des virgules entre chaque (pas d'espaces).
Vous devez utiliser le
Get-EventLog
de la cmdletComputerName
paramètre:Aussi, il semble que vous ayez une faute de frappe dans votre
$TimeProeprty
variable.Get-EventLog -ComputerName $Computer -LogName 'System' | Select-Object -ExpandProperty 'Source' -Unique | Sort-Object
pour voir ce que les sources de journaux sont disponibles sur ce système. Test avec Windows XP et 7 machines, je peux voir queMicrosoft-Windows-Winlogon
est retourné comme une source sur 7, mais pas XP.Vous n'êtes pas en passant le nom de l'ordinateur pour toute commande dans la boucle. Donc, c'est juste une boucle dans la même commande pour que de nombreux objets sont en $computerName Essayez de modifier la dernière ligne de ce:
Si cela ne fonctionne pas, assurez-vous que votre boucle foreach est en passant la droite de données:
Que doit afficher le nom de l'ordinateur de chaque machine que vous essayez de l'exécuter sur.
Mais il semble que vous essayez de l'exécuter sur un ordinateur, afin de supprimer la boucle Foreach et juste ajouter
-ComputerName $computername
à la fin de la Get-Eventlog commande avant votre instruction selectUn peu modifié et de son travail
Basé sur https://gallery.technet.microsoft.com/Log-Parser-to-Identify-8aac36bd
Vous pouvez saisir d'autres informations à partir de ReplacementStrings. Vous pouvez également spécifier un ordinateur distant dans le Get-Eventlog commande.