{"id":809717,"date":"2026-05-19T09:02:32","date_gmt":"2026-05-19T09:02:32","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=809717"},"modified":"2026-05-19T09:02:32","modified_gmt":"2026-05-19T09:02:32","slug":"view-user-login-history-with-powershell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/pt-br\/script-hub\/view-user-login-history-with-powershell\/","title":{"rendered":"Desvendando o hist\u00f3rico de login do usu\u00e1rio com o PowerShell"},"content":{"rendered":"<p>Os scripts do PowerShell desempenham um papel inestim\u00e1vel nas opera\u00e7\u00f5es e na seguran\u00e7a de TI, automatizando tarefas e extraindo informa\u00e7\u00f5es vitais para an\u00e1lise. Hoje, vamos nos aprofundar em um script que permite <strong>visualizar o hist\u00f3rico de login do usu\u00e1rio,<\/strong> uma fun\u00e7\u00e3o importante para auditar e monitorar o acesso ao sistema.<\/p>\n<h2>Hist\u00f3rico<\/h2>\n<p>Os registros de acesso s\u00e3o uma mina de ouro para os profissionais de TI. Eles ajudam a monitorar o uso do sistema, detectar acesso n\u00e3o autorizado e manter a responsabilidade. O script fornecido obt\u00e9m eventos de in\u00edcio e parada de sess\u00e3o do usu\u00e1rio, um conjunto de dados essencial para qualquer estrat\u00e9gia robusta de seguran\u00e7a de TI. Ao excluir as contas do sistema e concentrar-se apenas nos usu\u00e1rios genu\u00ednos, ele apresenta um hist\u00f3rico limpo e conciso do acesso do usu\u00e1rio, tornando a vida dos profissionais de TI e dos <a href=\"https:\/\/www.ninjaone.com\/what-is-an-msp\/\">provedores de servi\u00e7os gerenciados (MSPs)<\/a> mais simples e eficiente.<\/p>\n<h2>O roteiro<\/h2>\n<p><div class=\"button-wrap orange-button \"><a href=\"#disable-fast-startup\" data-js=\"button-script-cta\" class=\"button script-cta\" data-js=\"script-cta\"  data-modal=\"249406\" >Email me the script<\/a><\/div><br \/>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    This will return user session start and stop events.\r\n.DESCRIPTION\r\n    This will return user session start and stop events. Excluding system accounts.\r\n.EXAMPLE\r\n    No params needed\r\n    Returns all login events for all users.\r\n.EXAMPLE\r\n     -UserName \"Fred\"\r\n    Returns all user login events of the user Fred.\r\n.EXAMPLE\r\n     -Days 7\r\n    Returns the last 7 days of login events for all users.\r\n.EXAMPLE\r\n     -Days 7 -UserName \"Fred\"\r\n    Returns the last 7 days of login events for the user Fred.\r\n.EXAMPLE\r\n    PS C:&gt; Get-User-Login-History.ps1 -Days 7 -UserName \"Fred\"\r\n    Returns the last 7 days of login events for the user Fred.\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 10, Windows Server 2016\r\n    Release Notes:\r\n    Initial Release\r\n.OUTPUTS\r\n    Time                  Event        User  ID\r\n    ----                  -----        ----  --\r\n    10\/7\/2021 3:51:48 PM  SessionStop  User1 4634\r\n    10\/7\/2021 3:51:48 PM  SessionStart User1 4624\r\n.COMPONENT\r\n    ManageUsers\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#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    # Specify one user\r\n    [Parameter(Mandatory = $false)]\r\n    [String]\r\n    $UserName,\r\n    # How far back in days you want to search, this is in 24 hour increments from the time it executes\r\n    [Parameter(Mandatory = $false)]\r\n    [int]\r\n    $Days\r\n)\r\n\r\nbegin {\r\n    function Test-IsElevated {\r\n        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()\r\n        $p = New-Object System.Security.Principal.WindowsPrincipal($id)\r\n        if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))\r\n        { Write-Output $true }\r\n        else\r\n        { Write-Output $false }\r\n    }\r\n\r\n    # System accounts that we don't want\r\n    $SystemUsers = @(\r\n        \"SYSTEM\"\r\n        \"NETWORK SERVICE\"\r\n        \"LOCAL SERVICE\"\r\n    )\r\n    # Filter for only getting session start and stop events from Security event log\r\n    $FilterHashtable = @{\r\n        LogName = \"Security\";\r\n        id      = 4634, 4624\r\n    }\r\n    # If Days was specified then add this parameter\r\n    if ($Days) {\r\n        $FilterHashtable.Add(\"EndTime\", (Get-Date).AddDays(-$Days))\r\n    }\r\n    # Creating a hash table for parameter splatting\r\n    $Splat = @{\r\n        FilterHashtable = $FilterHashtable\r\n    }\r\n}\r\n\r\nprocess {\r\n    if (-not (Test-IsElevated)) {\r\n        Write-Error -Message \"Access Denied. Please run with Administrator privileges.\"\r\n        exit 1\r\n    }\r\n    # Get windows events, filter out everything but logins and logouts(Session starts and ends)\r\n    Get-WinEvent @Splat | ForEach-Object {\r\n        # UserName in the two event types are in different places in the Properties array\r\n        if ($_.Id -eq 4634) {\r\n            # Events with ID 4634 the user name is the second item in the array. Arrays start at 0 in PowerShell.\r\n            $User = $_.Properties[1].Value\r\n        }\r\n        else {\r\n            # Events with ID 4634 the user name is the sixth item in the array. Arrays start at 0 in PowerShell.\r\n            $User = $_.Properties[5].Value\r\n        }\r\n\r\n        # Filter out system accounts and computer logins(Active Directory related)\r\n        # DWM-0  = Desktop Window Manager\r\n        # UMFD-0 = User Mode Framework Driver\r\n        if ($SystemUsers -notcontains $User -and $User -notlike \"DWM-*\" -and $User -notlike \"UMFD-*\" -and $User -notlike \"*$\") {\r\n            # If the UserName parameter was specified then only return that user's events\r\n            if ($UserName -and $UserName -like $User) {\r\n                # Write out to StandardOutput\r\n                [PSCustomObject]@{\r\n                    Time  = $_.TimeCreated\r\n                    Event = if ($_.Id -eq 4634) { \"SessionStop\" } else { \"SessionStart\" }\r\n                    User  = $User\r\n                    ID    = $_.ID\r\n                }\r\n            } # If the UserName parameter was not specified return all users events\r\n            elseif (-not $UserName) {\r\n                # Write out to StandardOutput\r\n                [PSCustomObject]@{\r\n                    Time  = $_.TimeCreated\r\n                    Event = if ($_.Id -eq 4634) { \"SessionStop\" } else { \"SessionStart\" }\r\n                    User  = $User\r\n                    ID    = $_.ID\r\n                }\r\n            }\r\n        }\r\n        # Null $User just in case the next loop iteration doesn't set it, we can then see that the user name is missing\r\n        $User = $null\r\n    }\r\n}\r\n\r\nend {}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<div class=\"in-context-cta\"><p style=\"text-align: center;\">Acesse mais de 300 scripts no NinjaOne Dojo<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.ninjaone.com\/freetrialform\/\">Obter acesso<\/a><\/p>\n<\/div><\/p>\n<h2>Detalhamento<\/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\">O script come\u00e7a com uma s\u00e9rie de coment\u00e1rios que descrevem seu uso e formato de sa\u00edda.<\/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\">Em seguida, ele especifica seus par\u00e2metros, permitindo que o usu\u00e1rio filtre os resultados por nome de usu\u00e1rio ou por um n\u00famero espec\u00edfico de dias anteriores.<\/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\">No bloco <strong>begin<\/strong>, o script estabelece seus requisitos, incluindo a omiss\u00e3o de contas do sistema e a especifica\u00e7\u00e3o de IDs de eventos relevantes do log de seguran\u00e7a do Windows.<\/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=\"4\" data-aria-level=\"1\">O bloco <strong>de processo<\/strong> \u00e9 onde a m\u00e1gica acontece. Primeiro, ele garante que o script seja executado com privil\u00e9gios de administrador. Em seguida, ele obt\u00e9m os eventos do Windows correspondentes \u00e0s atividades de login e logout, filtrando contas do sistema ou irrelevantes.<\/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=\"4\" data-aria-level=\"1\">Para cada evento, ele determina o nome de usu\u00e1rio e se o evento foi um login (SessionStart) ou um logout (SessionStop), gerando esses detalhes.<\/li>\n<\/ul>\n<h2>Casos de uso em potencial<\/h2>\n<p>Considere um administrador de TI chamado Alex. Recentemente, houve casos de acesso n\u00e3o autorizado a dados na empresa. Alex decide revisar o hist\u00f3rico de login da \u00faltima semana. Ao usar esse script com o par\u00e2metro <strong>-Days 7<\/strong>, Alex pode obter uma lista abrangente de todos os eventos de acesso do usu\u00e1rio, ajudando-o a identificar qualquer atividade suspeita.<\/p>\n<h2>Compara\u00e7\u00f5es<\/h2>\n<p>Embora existam ferramentas e plataformas dedicadas que oferecem rastreamento da atividade do usu\u00e1rio, muitas delas geralmente est\u00e3o associadas a conjuntos de software volumosos ou t\u00eam um pre\u00e7o elevado. Esse script do PowerShell oferece uma alternativa leve, personaliz\u00e1vel e econ\u00f4mica. Al\u00e9m disso, outros m\u00e9todos podem exigir configura\u00e7\u00f5es extensas, enquanto esse script \u00e9 plug-and-play, exigindo um m\u00ednimo de configura\u00e7\u00e3o.<\/p>\n<h2>Implica\u00e7\u00f5es<\/h2>\n<p>Conhecer os padr\u00f5es de acesso dos usu\u00e1rios pode ser uma faca de dois gumes. Embora isso permita que os profissionais de TI mantenham a integridade do sistema, o manuseio incorreto dessas informa\u00e7\u00f5es pode violar as diretrizes de privacidade. Al\u00e9m disso, o monitoramento persistente pode gerar preocupa\u00e7\u00f5es quanto \u00e0 confian\u00e7a no local de trabalho. Portanto, embora o script seja uma ferramenta poderosa, \u00e9 essencial us\u00e1-lo criteriosamente, aderindo aos padr\u00f5es \u00e9ticos e legais.<\/p>\n<h2>Recomenda\u00e7\u00f5es<\/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\">Certifique-se sempre de estar executando a <a href=\"https:\/\/www.ninjaone.com\/blog\/how-to-do-a-powershell-version-check\/\">vers\u00e3o mais recente do PowerShell<\/a> para otimizar o desempenho e a seguran\u00e7a.<\/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\">Documente todas as inst\u00e2ncias em que voc\u00ea utiliza esse script para fins de auditoria.<\/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\">Fa\u00e7a backup regularmente dos seus registros para evitar poss\u00edveis perdas de dados.<\/li>\n<\/ul>\n<h2>Considera\u00e7\u00f5es finais<\/h2>\n<p>O gerenciamento do acesso do usu\u00e1rio \u00e9 um aspecto crucial da seguran\u00e7a de TI. Esse script do PowerShell oferece uma maneira eficiente de visualizar o hist\u00f3rico de login, auxiliando na detec\u00e7\u00e3o e na resposta oportunas a amea\u00e7as. Embora o script seja uma solu\u00e7\u00e3o aut\u00f4noma, integr\u00e1-lo a plataformas como o NinjaOne pode elevar seus recursos, oferecendo uma solu\u00e7\u00e3o hol\u00edstica de gerenciamento de TI.<\/p>\n<p>O uso do <a href=\"https:\/\/www.ninjaone.com\/pt-br\/\">NinjaOne<\/a> junto com esses scripts pode consolidar o registro, aprimorar os mecanismos de alerta e fornecer <a href=\"https:\/\/www.ninjaone.com\/pt-br\/blog\/single-pane-of-glass-software-explained\/\">um painel unificado para todas as opera\u00e7\u00f5es de TI<\/a>, garantindo uma infraestrutura de TI robusta, simplificada e segura.<\/p>\n","protected":false},"author":35,"featured_media":143597,"parent":0,"menu_order":0,"comment_status":"closed","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":"yes","_lmt_disable":""},"operating_system":[4212],"use_cases":[12435],"class_list":["post-809717","script_hub","type-script_hub","status-publish","has-post-thumbnail","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/script_hub\/809717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/comments?post=809717"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/media\/143597"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/media?parent=809717"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/operating_system?post=809717"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/use_cases?post=809717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}