{"id":208415,"date":"2024-01-22T10:51:51","date_gmt":"2024-01-22T10:51:51","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/comment-surveiller-la-derniere-connexion-d-un-utilisateur-avec-powershell\/"},"modified":"2024-03-04T19:04:11","modified_gmt":"2024-03-04T19:04:11","slug":"comment-surveiller-la-derniere-connexion-d-un-utilisateur-avec-powershell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/fr\/script-hub\/comment-surveiller-la-derniere-connexion-d-un-utilisateur-avec-powershell\/","title":{"rendered":"Comment surveiller la derni\u00e8re connexion d&rsquo;un utilisateur avec PowerShell"},"content":{"rendered":"<p>Aujourd&rsquo;hui, nous nous penchons sur un script PowerShell qui\u00a0permet de <strong>surveiller la derni\u00e8re connexion d&rsquo;un utilisateur<\/strong>. Dans la gestion moderne de l&rsquo;informatique, l&rsquo;une des t\u00e2ches essentielles consiste \u00e0 surveiller les comptes d&rsquo;utilisateurs, en particulier \u00e0 identifier les comptes dormants. Cette t\u00e2che ne se limite pas \u00e0 la maintenance habituelle. Elle est directement li\u00e9e \u00e0 la s\u00e9curit\u00e9, \u00e0 la conformit\u00e9 et \u00e0 la gestion efficace des ressources.<\/p>\n<h2>Contexte<\/h2>\n<p>Le script fourni est con\u00e7u pour identifier et signaler les comptes d&rsquo;utilisateurs en fonction de leur derni\u00e8re heure de connexion, en particulier ceux qui n&rsquo;ont pas \u00e9t\u00e9 utilis\u00e9s pendant une dur\u00e9e d\u00e9termin\u00e9e. Pour les professionnels de l&rsquo;informatique et les <a href=\"https:\/\/www.ninjaone.com\/fr\/quest-ce-quun-msp\">fournisseurs de services g\u00e9r\u00e9s (MSP)<\/a>, il est essentiel de s&rsquo;assurer que les comptes inutilis\u00e9s sont identifi\u00e9s et g\u00e9r\u00e9s. Les comptes dormants pr\u00e9sentent des risques pour la s\u00e9curit\u00e9 et deviennent souvent des cibles faciles pour les cybercriminels. De plus, les entreprises soumises \u00e0 des r\u00e8gles de conformit\u00e9 sont tenues de suivre l&rsquo;activit\u00e9 des utilisateurs et de d\u00e9sactiver les comptes inutilis\u00e9s.<\/p>\n<h2>Le script<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Returns exit code of 1 if any Enabled accounts that haven't been logged in over 90 days or a custom amount of days.\r\n.DESCRIPTION\r\n    Returns exit code of 1 if any Enabled accounts that haven't been logged in over 90 days or a custom amount of days.\r\n.EXAMPLE\r\n    No parameters needed.\r\n    Returns exit code of 1 if any Enabled accounts that haven't been logged in over 90 days.\r\n.EXAMPLE\r\n    -IncludeDisabled\r\n    Returns exit code of 1 if any Enabled or Disabled accounts that haven't been logged in over 90 days.\r\n.EXAMPLE\r\n    -Days 60\r\n    Returns exit code of 1 if any Enabled accounts that haven't been logged in over 60 days.\r\n.EXAMPLE\r\n    -Days 60 -IncludeDisabled\r\n    Returns exit code of 1 if any Enabled or Disabled accounts that haven't been logged in over 60 days.\r\n.OUTPUTS\r\n    None\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 7, Windows Server 2012\r\n    Exit code 1: Found users that haven't logged in over X days and are enabled.\r\n    Exit code 2: Calling \"net.exe user\" or \"Get-LocalUser\" failed.\r\n    Release Notes:\r\n    Initial Release\r\nBy using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https:\/\/www.ninjaone.com\/terms-of-use.\r\n    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. \r\n    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. \r\n    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. \r\n    Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. \r\n    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. \r\n    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. \r\n    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n.COMPONENT\r\n    ManageUsers\r\n#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    [Parameter()]\r\n    [int]\r\n    $Days = 90,\r\n    [Parameter()]\r\n    [switch]\r\n    $IncludeDisabled\r\n)\r\n\r\nbegin {}\r\nprocess {\r\n    if ($Days -lt 0) {\r\n        # Change negative days to the expected positive days\r\n        $Days = 0 - $Days\r\n    }\r\n    $Accounts = if ($(Get-Command \"Get-LocalUser\").Name -like \"Get-LocalUser\") {\r\n        try {\r\n            Get-LocalUser | Select-Object Name, Enabled, SID, LastLogon\r\n        }\r\n        catch {\r\n            exit 2\r\n        }\r\n    }\r\n    else {\r\n        # Get users from net.exe user\r\n        $Data = $(net.exe user) | Select-Object -Skip 4\r\n        # Check if the command ran the way we wanted and the exit code is 0\r\n        if ($($Data | Select-Object -Last 2 | Select-Object -First 1) -like \"*The command completed successfully.*\" -and $LASTEXITCODE -eq 0) {\r\n            # Process the output and get only the users\r\n            $Users = $Data[0..($Data.Count - 3)] -split 's+' | Where-Object { -not $([String]::IsNullOrEmpty($_)) }\r\n            # Loop through each user\r\n            $Users | ForEach-Object {\r\n                # Get the Account active property look for a Yes\r\n                $Enabled = $(net.exe user $_) | Where-Object {\r\n                    $_ -like \"Account active*\" -and\r\n                    $($_ -split 's+' | Select-Object -Last 1) -like \"Yes\"\r\n                }\r\n                # Get the Last logon property\r\n                $LastLogon = $(\r\n                    $(\r\n                        $(net.exe user $_) | Where-Object {\r\n                            $_ -like \"Last logon*\"\r\n                        }\r\n                    ) -split 's+' | Select-Object -Skip 2\r\n                ) -join ' '\r\n                # Get the Password last set property\r\n                $PasswordLastSet = $(\r\n                    $(\r\n                        $(net.exe user $_) | Where-Object {\r\n                            $_ -like \"Password last set*\"\r\n                        }\r\n                    ) -split 's+' | Select-Object -Skip 3\r\n                ) -join ' '\r\n                # Output Name and Enabled almost like how Get-LocalUser displays it's data\r\n                [PSCustomObject]@{\r\n                    Name      = $_\r\n                    Enabled   = if ($Enabled -like \"*Yes*\") { $true }else { $false }\r\n                    LastLogon = if ($LastLogon -like \"*Never*\") { [DateTime]::Parse($PasswordLastSet) } else { [DateTime]::Parse($LastLogon) }\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            exit 2\r\n        }\r\n    }\r\n    $Output = $Accounts | Where-Object {\r\n        if ($IncludeDisabled) {\r\n            $_.LastLogon -lt $(Get-Date).AddDays(0 - $Days)\r\n        }\r\n        else {\r\n            $_.Enabled -and $_.LastLogon -lt $(Get-Date).AddDays(0 - $Days)\r\n        }\r\n    }\r\n    $Output | Out-String | Write-Host\r\n    if ($null -ne $Output) {\r\n        exit 1\r\n    }\r\n}\r\nend {}<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"in-context-cta\"><p style=\"text-align: center;\">Acc\u00e9dez \u00e0 plus de 700 scripts dans le Dojo NinjaOne<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.ninjaone.com\/fr\/phase-de-test-gratuit\/\">Obtenez l&rsquo;acc\u00e8s<\/a><\/p>\n<\/div>\n<h2>Description d\u00e9taill\u00e9e<\/h2>\n<p>Le script commence par d\u00e9finir une dur\u00e9e par d\u00e9faut de 90 jours pour v\u00e9rifier l&rsquo;inactivit\u00e9. Il utilise ensuite la cmdlet \u00ab\u00a0Get-LocalUser\u00a0\u00bb ou la commande \u00ab\u00a0net.exe user\u00a0\u00bb, en fonction de ce qui est disponible.<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\">Si la cmdlet \u00ab\u00a0Get-LocalUser\u00a0\u00bb est pr\u00e9sente, elle r\u00e9cup\u00e8re directement les d\u00e9tails.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\">Si ce n&rsquo;est pas le cas, il recourt \u00e0 la commande \u00ab\u00a0net.exe user\u00a0\u00bb. Cette commande r\u00e9cup\u00e8re les donn\u00e9es et analyse ensuite les r\u00e9sultats pour en extraire les d\u00e9tails n\u00e9cessaires.<\/li>\n<\/ul>\n<p>La premi\u00e8re d\u00e9marche consiste \u00e0 v\u00e9rifier si la derni\u00e8re date de connexion de chaque utilisateur est sup\u00e9rieure au seuil d\u00e9fini. Si une correspondance est trouv\u00e9e, elle est affich\u00e9e et le script se termine avec un code de 1. Un code de sortie de 2 est utilis\u00e9 pour les exceptions lors de l&rsquo;extraction des donn\u00e9es de l&rsquo;utilisateur.<\/p>\n<h2>Cas d&rsquo;utilisation potentiels<\/h2>\n<p>Imaginez Jane, informaticienne dans une entreprise de taille moyenne. R\u00e9cemment, l&rsquo;entreprise a \u00e9t\u00e9 confront\u00e9e \u00e0 une faille de s\u00e9curit\u00e9 mineure. Apr\u00e8s l&rsquo;incident, Jane a \u00e9t\u00e9 charg\u00e9e de renforcer la s\u00e9curit\u00e9. L&rsquo;une des suggestions \u00e9tait de v\u00e9rifier r\u00e9guli\u00e8rement les comptes inactifs et de les d\u00e9sactiver. \u00c0 l&rsquo;aide de ce script, elle peut mettre en place une routine mensuelle pour r\u00e9cup\u00e9rer une liste de ces comptes, garantissant ainsi que le r\u00e9pertoire des utilisateurs de l&rsquo;entreprise reste actif et s\u00e9curis\u00e9.<\/p>\n<h2>Comparaisons<\/h2>\n<p>Bien que le script utilise PowerShell, une autre approche pourrait consister \u00e0 interroger directement l&rsquo;Active Directory (s&rsquo;il est disponible) pour obtenir des informations sur les comptes d&rsquo;utilisateurs. Des outils comme ADManager Plus ou m\u00eame Active Directory Users and Computers (ADUC) peuvent \u00eatre utilis\u00e9s. Cependant, notre script offre une alternative l\u00e9g\u00e8re, personnalisable et gratuite.<\/p>\n<h2>FAQ<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>Que faire si je veux v\u00e9rifier une dur\u00e9e d&rsquo;inactivit\u00e9 diff\u00e9rente ?<\/strong><br \/>\nVous pouvez personnaliser le param\u00e8tre $Days.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>Le script peut-il identifier les comptes activ\u00e9s et d\u00e9sactiv\u00e9s ?<\/strong><br \/>\nOui, en utilisant l&rsquo;option -IncludeDisabled, le script peut r\u00e9cup\u00e9rer les comptes activ\u00e9s et d\u00e9sactiv\u00e9s.<\/li>\n<\/ul>\n<h2>Implications<\/h2>\n<p>Au-del\u00e0 de l&rsquo;identification des comptes dormants, ce script a un impact plus vaste sur la s\u00e9curit\u00e9 informatique. Les comptes inactifs peuvent \u00eatre facilement compromis et donner lieu \u00e0 un acc\u00e8s non autoris\u00e9. Des contr\u00f4les p\u00e9riodiques de l&rsquo;inactivit\u00e9 des utilisateurs et des mesures appropri\u00e9es peuvent pr\u00e9venir les violations potentielles.<\/p>\n<h2>Recommandations<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\">Testez toujours le script dans un environnement bac \u00e0 sable (sandbox) avant de le d\u00e9ployer dans un environnement r\u00e9el.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\">Planifiez l&rsquo;ex\u00e9cution p\u00e9riodique de ce script afin d&rsquo;assurer une surveillance continue.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\">En cas d&rsquo;identification de comptes dormants, prenez les mesures appropri\u00e9es, telles que la d\u00e9sactivation du compte ou la notification \u00e0 l&rsquo;utilisateur ou \u00e0 son responsable.<\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>Tandis que ce script constitue une solution efficace, l&rsquo;int\u00e9gration d&rsquo;outils tels que <a href=\"https:\/\/www.ninjaone.com\/fr\/\">NinjaOne<\/a> permet d&rsquo;am\u00e9liorer encore les capacit\u00e9s, en rendant les t\u00e2ches plus automatis\u00e9es et en fournissant un <a href=\"https:\/\/www.ninjaone.com\/fr\/plateforme-de-gestion-de-terminaux\">tableau de bord centralis\u00e9 pour la gestion<\/a>. Des outils tels que NinjaOne sont con\u00e7us pour g\u00e9rer efficacement ces t\u00e2ches, ce qui permet aux professionnels de l&rsquo;informatique comme Jane de se concentrer sur des t\u00e2ches plus strat\u00e9giques, en utilisant des scripts tels que celui pr\u00e9sent\u00e9 ci-dessus.<\/p>\n","protected":false},"author":35,"featured_media":144295,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[4289],"class_list":["post-208415","script_hub","type-script_hub","status-publish","has-post-thumbnail","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/script_hub\/208415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/comments?post=208415"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/media\/144295"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/media?parent=208415"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/operating_system?post=208415"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/use_cases?post=208415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}