Auteur de questions
Duree de logon de mes utilisateurs

Question
-
Bonjour,
Fraîchement tombé du nid, je ne parviens pas encore à voler complètement de mes propres ailes concernant Powershell
Je souhaite récupérer la durée de logon de mes utilisateurs sur les serveurs RDS
J'utilise le script AnalyzeLogonDuration.ps1 à partir duquel j'alimente un fichier LOG, qui fonctionne très bien, mais je souhaiterais le faire par lot.
Avec la commande Query Session, je récupère les utilisateurs connectés sur les serveurs, mais ce que je ne parviens pas à faire, c'est obtenir le nom d'utilisateur pour lancer ma commande Get-LogonDurationAnalysis - Username.
Voici mon script:
#Je récupère les noms des utilisateurs connectés sur les serveurs RDS 01 à 09 et les exportent dans fichier .csv (c'est parfait)
$Num = 1
do{
$line = query session /server:SRV-0$Num
$line
Add-Content -path \\SRV-inv-01\connexions\QuerySession.csv -Value $line
$Num = $num + 1
}Until($Num -eq 9)
#Maintenant, je veux récupérer la durée de Logon de chaque utilisateur (et c'est là que ça coince)
$Users = Import-csv -path \\SRV-inv-01\connexions\QuerySession.csv
Import-Module c:\scripts\LogonDurationAnalysis_Signed.ps1
foreach ($Username in $Users){
Import-Module c:\scripts\LogonDurationAnalysis_Signed.ps1
Get-LogonDurationAnalysis -Username $UsernameSi quelqu'un pouvait me mettre sur une piste. Je commence à m'embrouiller et je n'ai plus le recul ni l'expérience suffisante pour arriver au résultat voulu ..
Toutes les réponses
-
salut SmaLL-ID
pourquoi tu n'utilise pas le module remotedesktop
je pense en particulier à Get-RDSUserSession
il faut biensur un serveur 2012 au minimum
-
-
-
Oui, j'ai essayé mais les commandes ne sont pas reconnues.
En fait je souhaite évaluer la durée des ouvertures de session des utilisateurs afin de l'optimiser.
Après, sessions en cours ou fermée: peu importe. Le script récupère le dernier Logon de l'utilisateur. Ce qui m’intéresse, c'est d'établir une moyenne.
-
ok alors ton script est le bon
malheureusement je n'est plus accès a des serveurs pour avoir les valeurs que renvoie Get-LogonDurationAnalysis
si tu veux un peu d'aide peut tu donner ce que te renvoie la fonction
Get-LogonDurationAnalysis utilisateur tondomaine
dans ton script :
Import-Module c:\scripts\LogonDurationAnalysis_Signed.ps1 $Users = Import-csv -path \\SRV-inv-01\connexions\QuerySession.csv foreach ($Username in $Users) { Get-LogonDurationAnalysis -UserName $Username -UserDomaine ton domaine }
peut tu aussi donner les deux ou trois premières ligne du fichier QuerySession.csv
-
Bonjour,
- En temps normal, Get-LogonDurationAnalysis que j'exécute sur les serveurs RDS me renvoie la durée des différentes phases (Profil + GPO +scripts ...) ainsi que la durée totale.
Je récupère ensuite ces valeurs pour les envoyer dans un fichier.txt sous cette forme :
02/08/2019 12:06 ; SRV-RDS-05 ; small-ID ; PC100INF20 ; 38,9 seconds
► Par contre, lorsque j'utilise mon script, je n'ai pas de message d'erreur et aucune ligne n'a été ajoutée à mon fichier.txt
- QuerySession.csv, quant à lui me donne :
SESSION UTILISATEUR ID ETAT TYPE PERIPHERIQUE
RDP-TCP#1 User01 110 Actif rdpwd
RDP-TCP#2 User02 122 Actif rdpwd
User03 123 Déco
RDP-TCP#3 User03 125 Actif rdpwd
-
Je viens de rajouter la ligne $ErrorActionPreference ="inquire" à mon script
Et là, une fois qu'il a fini Query Session il me dit qu'il ne trouve pas l'EventID 4624 (Successfully logged on event) in the Windows Security Log.
Or lorsque que je lance la commande Get-LogonDurationAnalysis - Username directement dans la console Powershell, j'obtient bien un résultat.
Je pense que je ne récupère pas la bonne variable utilisateur dans mon fichier QuerySession.csv....
-
alors pour le message sur eventID 4624, tu dois activé l'audit de sécurité ouverture de session, voir ce site pour l'activation de l'audit. il faut un délais pour que audit soit actif sur les serveurs et AD (entre 1 à 2 heures)
ATTENTION a ne pas tombé sur l'envie d'activé plusieurs audits, car ils remplissent très vite les journaux qui ont une taille très limité. je me suis vu avoir des journaux sécurités avec 1 heure d'historique ! :(
après pour ton script il faut d'abord que tu rajout en première ligne du fichier des sessions une ligne avec les entête de colonne. par exemple avec ce code :
Add-Content -path c:\temp\QuerySession.csv -Value "date;serveur;utilisateur;ordinateur;durée"
ces noms de colonnes sont utilisé dans ton deuxième script, le $UserName.utilisateur :Import-Module c:\scripts\LogonDurationAnalysis_Signed.ps1 $Users = Import-csv -path \\SRV-inv-01\connexions\QuerySession.csv foreach ($Username in $Users) { Get-LogonDurationAnalysis -UserName $Username.utilisateur -UserDomaine ton domaine }
tu peut ainsi utilisé pour le reste de ton ces noms de colonnes si tu en a besoin
- Modifié 6ratgus lundi 5 août 2019 23:21
-
J'avais activé Auditer le suivi des processus et les événements de connexion, mais pas les événements de connexion aux comptes. OK, c'est bon: je n'ai plus de message d'erreur à ce niveau.
Par contre, pour ce qui est de cette ligne :
Add-Content -path \\SRV-inv-01\QuerySession.csv -Value "session;utilisateur;ID;Etat"
Par défaut la commande Query Session me l'ajoute déjà en première ligne dans mon fichier QuerySession.csv
Je l'ai malgré tout ajoutée, pour voir, dans mon script et j'obtiens du coup, deux fois cette ligne dans mon fichier.
et lorsque je lance mon script, j'obtiens cette fois le message suivant :
"Impossible de traiter l'argument, car la valeur 'name' n'est pas valide. Modifiez la valeur de l'argument 'name' et réexécutez l'opération."
-
-
je n'avais pas l'info sur cette ligne du fichier querysession.csv, le add-content est donc inutile
pour le reste tu a toutes les infos dont t'a besoin
ton script fonctionne t'il ?
Ps : le script LogonDurationAnalysis_Signed.ps1 a besoin tu nom de domaine pour interrogé le journal d’événements. voir la variable $UserDomain dans ces deux extraits de code :$LogonEvent = Get-WinEvent -MaxEvents 1 -ProviderName Microsoft-Windows-Security-Auditing -FilterXPath @" *[System[(EventID='4624')]] and *[EventData[Data[@Name='TargetUserName'] and (Data=`"$UserName`")]] and *[EventData[Data[@Name='TargetDomainName'] and (Data=`"$UserDomain`")]] and *[EventData[Data[@Name='LogonType'] and (Data=`"2`" or Data=`"10`" or Data=`"11`")]] and *[EventData[Data[@Name='ProcessName'] and (Data=`"C:\Windows\System32\winlogon.exe`")]] "@ -ErrorAction Stop
$GPScriptStartXPath = @" *[System[(EventID='4018') and TimeCreated[@SystemTime>='$ISO8601Date']]] and *[EventData[Data[@Name='PrincipalSamName'] and (Data=`"$UserDomain\$UserName`")]] and *[EventData[Data[@Name='ScriptType'] and (Data='1')]] "@ $GPScriptEndXPath = @" *[System[(EventID='5018') and TimeCreated[@SystemTime>='$ISO8601Date']]] and *[EventData[Data[@Name='PrincipalSamName'] and (Data='"$UserDomain\$UserName`")]] and *[EventData[Data[@Name='ScriptType'] and (Data='1')]] "@
- Modifié 6ratgus mardi 6 août 2019 14:21
-
Je n'utilisais pas la variable $UserDomain car dans la description du script AnalyseLogonDuration_Signed.ps1, il est indiqué comme facultatif:
- –UserName: <The name of the user we want to examine> [optional]
- –UserDomain: <The name of the domain the user is member of> [optional]
Le script fonctionne très bien sans cette variable et me renvoie bien les infos.
Je l'avais quand même rajouté puisque je voyais que tu le mentionnais plus haut
Mais la valeur 'name' n'est pas valide malgré tout.
#
foreach ($Username in $Users){
Get-LogonDurationAnalysis -Username $Username.Utilisateur -UserDomain mondomain.fr
#
-
peut tu afficher le contenue de $Username.Utilisateur dans ta boucle et vérifier si son contenue est bon, utilise ce script :
$Users = Import-csv -path c:\temp\QuerySession.csv foreach ($Username in $Users){ "debut#$($Username.utilisateur)#fin" }
il ne doit pas y avoir d'espace entre les deux # dans les valeurs affichés
- Modifié 6ratgus mardi 6 août 2019 15:34
-
-
tu me dis qu'il y rien du fichier qui affiche !?
tu doit avoir le liste des noms de session qui s'affiche
pour reprendre ton exemple, tu doit avoir ça :
debut#User01#fin debut#User02#fin debut#User03#fin debut#User04#fin debut#User05#fin debut#User06#fin
le cas contraire ça veux dire que ton fichier QuerySession.csv n'est pas un CSV et que tu doit le convertir
$Users = Get-Content -path c:\temp\QuerySession.csv
# convertion des sessions $liste = $users | foreach { Convertfrom-String $_ -PropertyNames session, utilisateur, ID, Etat } $liste | Format-Table Import-Module c:\scripts\LogonDurationAnalysis_Signed.ps1 foreach ($Username in $liste){ "debut#$($Username.utilisateur)#fin" Get-LogonDurationAnalysis -UserName $Username.utilisateur }
-
Bonjour,
J'ai fini par utiliser le module Get-UserSession.ps1 avec lequel je récupère bien mes utilisateurs et ensuite je parviens à obtenir mes durées de Logon grâce à LogonDurationAnalysis.
C'est sans doute pas très joli joli comme méthode, mais au moins j'ai les résultats que je souhaitais, et il faut que j'avance. J'y reviendrais dessus plus tard lorsque j'aurai un peu plus de temps pour cela pour faire quelquechose de plus propre et afin de mieux comprendre ce qui m'a échappé.
En tout cas, merci pour ton aide et le temps que tu m'as consacré !!
;)
-
Bonjour,
1 an que je cherche ce genre de fonction, vous imaginez pas comment je suis très intéressé par ce script d'analyse de temps de connexion des sessions, mais je ne le trouve nulle part ...
Pourriez-vous me donner l'URL de téléchargement svp ?
J'aimerai utiliser ce script sur mon AD, est-ce faisable en l'état ou faut-il y faire des modif ?