none
Duree de logon de mes utilisateurs RRS feed

  • 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 $Username

    Si 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 ..


    jeudi 1 août 2019 14:45

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 

     

    jeudi 1 août 2019 21:17
  • Bonjour,

    Malheureusement nos serveurs RDS sont encore en 2008R2 ......

    vendredi 2 août 2019 07:49
  • il me semble que certaine commande fonctionne en 2008 a tu fait un essai ?

    tu ne veux que les sessions en cours ? pas celle fermé il y a 5 minutes !?

    vendredi 2 août 2019 09:44
  • 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.

    vendredi 2 août 2019 09:54
  • 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 

    vendredi 2 août 2019 15:30
  • 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                    

    lundi 5 août 2019 10:01
  • 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....

    lundi 5 août 2019 10:30
  • 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
    lundi 5 août 2019 23:09
  • 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."

    mardi 6 août 2019 10:13
  • PS: j'ai bien modifié la variable à ce niveau:

    Get-LogonDurationAnalysis -UserName $Username.utilisateur

    mardi 6 août 2019 10:18
  • 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
    mardi 6 août 2019 14:13
  • Je n'utilisais pas la variable $UserDomain car dans la description du script AnalyseLogonDuration_Signed.ps1, il est indiqué comme facultatif:

    1.        UserName: <The name of the user we want to examine> [optional]
    2.       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


    #


    mardi 6 août 2019 15:10
  • 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
    mardi 6 août 2019 15:30
  • $Users = Import-csv -path c:\temp\QuerySession.csv
    foreach ($Username in $Users){
        "debut#$($Username.utilisateur)#fin"
        }
    Avec ceci, cela me donne une ligne debut##fin pour ligne dans mon fichier .csv sans espace entre les #
    mercredi 7 août 2019 16:09
  • 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 }




    jeudi 8 août 2019 16:20
  • 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é !!  

    ;)


    mardi 13 août 2019 09:12