{"id":810196,"date":"2026-05-20T14:08:59","date_gmt":"2026-05-20T14:08:59","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=810196"},"modified":"2026-05-20T14:08:59","modified_gmt":"2026-05-20T14:08:59","slug":"como-fazer-o-logout-remoto-de-usuarios-no-windows-com-o-powershell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/pt-br\/script-hub\/como-fazer-o-logout-remoto-de-usuarios-no-windows-com-o-powershell\/","title":{"rendered":"Como fazer o logoff remoto de usu\u00e1rios no Windows com o PowerShell"},"content":{"rendered":"<p>No cen\u00e1rio moderno de TI, o gerenciamento de sess\u00f5es de usu\u00e1rios \u00e9 fundamental. Seja para garantir que as sess\u00f5es n\u00e3o utilizadas n\u00e3o consumam recursos ou para manter os protocolos de seguran\u00e7a, garantindo que as sess\u00f5es n\u00e3o autorizadas sejam encerradas, \u00e9 necess\u00e1rio um gerenciamento eficiente das sess\u00f5es. Essa import\u00e2ncia \u00e9 enfatizada quando consideramos o aumento do trabalho remoto e as v\u00e1rias sess\u00f5es iniciadas em v\u00e1rios locais. <a href=\"https:\/\/www.ninjaone.com\/it-hub\/gerenciamento-de-endpoints\/what-is-powershell\/\">O PowerShell<\/a>, com sua versatilidade, oferece uma excelente solu\u00e7\u00e3o para esse desafio por meio deste script que far\u00e1 o logoff <strong>remoto dos usu\u00e1rios<\/strong><\/p>\n<h2>Hist\u00f3rico<\/h2>\n<p>O script fornecido tem uma finalidade simples, mas crucial: fazer logoff de usu\u00e1rios especificados de uma m\u00e1quina Windows, com exce\u00e7\u00e3o da sess\u00e3o do console. Embora muitos profissionais de TI e <a href=\"https:\/\/www.ninjaone.com\/what-is-an-msp\/\">provedores de servi\u00e7os gerenciados (MSPs)<\/a> possam se perguntar sobre sua utilidade, dada a disponibilidade de ferramentas baseadas em GUI, lembre-se de que as solu\u00e7\u00f5es automatizadas e dimension\u00e1veis geralmente exigem abordagens baseadas em scripts. Esse script permite que os administradores integrem perfeitamente os recursos de logout do usu\u00e1rio em fluxos de trabalho de automa\u00e7\u00e3o maiores, o que \u00e9 crucial para empresas com v\u00e1rias sess\u00f5es de usu\u00e1rio para gerenciar.<\/p>\n<h2>O roteiro<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Logs off user(s) specified. You can't log off a user from the console session.\r\n.DESCRIPTION\r\n    Logs off user(s) specified. You can't log off a user from the console session.\r\n.EXAMPLE\r\n     -User \"Administrator\"\r\n    Logs off Administrator user.\r\n.EXAMPLE\r\n     -User \"Administrator\",\"Guest\"\r\n    Logs off Administrator and Guest users.\r\n.EXAMPLE\r\n    PS C:&gt; Logoff-User.ps1 -User \"Administrator\",\"Guest\"\r\n    Logs off Administrator and Guest users.\r\n.OUTPUTS\r\n    String[]\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 10, Windows Server 2016\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(SupportsShouldProcess = $True)]\r\nparam (\r\n    # User name(s) to log off\r\n    [Parameter(Mandatory = $true)]\r\n    [String[]]\r\n    $User\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    Function Get-QueryUser() {\r\n        Param()\r\n        # Replaces all occurrences of 2 or more spaces in a row with a single comma\r\n        $Lines = @(query.exe user).foreach({ $(($_) -replace ('s{2,}', ',')) })\r\n        $Header = $($Lines[0].split(',').trim())\r\n        for ($i = 1; $i -lt $($Lines.Count); $i++) {\r\n            $Line = $($Lines[$i].split(',')).foreach({ $_.trim().trim('&gt;') })\r\n            # Accounts for disconnected users\r\n            if ($Line.count -eq 5) {\r\n                $Line = @($Line[0], \"$($null)\", $Line[1], $Line[2], $Line[3], $Line[4] )\r\n            }\r\n            $CurUser = [PSCustomObject]::new()\r\n            for ($j = 0; $j -lt $($Line.count); $j++) {\r\n                $CurUser | Add-Member -MemberType NoteProperty -Name $Header[$j] -Value $Line[$j]\r\n            }\r\n            $CurUser\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 a list of users logged on from query.exe, format it for powershell to process\r\n    $QueryResults = Get-QueryUser\r\n    # Accounts for only one user logged in\r\n    $QueryTest = $($QueryResults | Select-Object -First 1)\r\n    if (\r\n        $QueryResults.Count -or\r\n        (\r\n            $QueryTest.USERNAME -is [String] -and\r\n            -not [String]::IsNullOrEmpty($QueryTest.USERNAME) -and\r\n            -not [String]::IsNullOrWhiteSpace($QueryTest.USERNAME)\r\n        )\r\n    ) {\r\n        $script:HasError = $false\r\n        $QueryResults | Where-Object {\r\n    \r\n            # For each session filter out the user that weren't specified in $User\r\n            $_.UserName -in $User\r\n    \r\n        } | ForEach-Object {\r\n            Write-Host \"Found Logged In User: $($_.UserName)\"\r\n            if ($_.SessionName -like \"console\") {\r\n                # We can't log out a user that is at the console.\r\n                # We could do this logic in the Where-Object code block, but then there isn't an output of what was skipped.\r\n                # https:\/\/docs.microsoft.com\/en-us\/windows-server\/administration\/windows-commands\/logoff#remarks\r\n                # \"You can't log off a user from the console session.\"\r\n                Write-Host \"Skipping user, can't log off a user($($_.UserName)) from the $($_.SessionName) session.\"\r\n            }\r\n            else {\r\n                # Log off the user session with a matching ID\r\n                logoff.exe $_.Id\r\n                if ($LASTEXITCODE -gt 0) {\r\n                    $script:HasError = $true\r\n                    Write-Error \"logoff.exe $($_.Id) returned exit code: $LASTEXITCODE\"\r\n                }\r\n                else {\r\n                    Write-Host \"Logged Off User: $($_.UserName)\"\r\n                }\r\n            }\r\n        }\r\n        if ($script:HasError) {\r\n            exit 1\r\n        }\r\n    }\r\n    else {\r\n        Write-Output \"No Users Logged In\"\r\n        exit 2\r\n    }\r\n}\r\nend {}<\/pre>\n<p>&nbsp;<\/p>\n\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>\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\"><strong>Inicializa\u00e7\u00e3o<\/strong>: O script come\u00e7a com uma s\u00e9rie de coment\u00e1rios, ou &#8216;.SYNOPSIS&#8217;, &#8216;.DESCRIPTION&#8217; e &#8216;.EXAMPLE&#8217;, que fornecem uma vis\u00e3o geral, uma descri\u00e7\u00e3o detalhada e exemplos de uso, respectivamente.<\/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\"><strong>Par\u00e2metros<\/strong>: O bloco <strong>param<\/strong> define que o script requer uma entrada<strong>($User<\/strong>), que \u00e9 o(s) nome(s) de usu\u00e1rio para fazer logoff.<\/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\"><strong>Fun\u00e7\u00f5es<\/strong>: Duas fun\u00e7\u00f5es prim\u00e1rias s\u00e3o definidas:<\/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\"><strong>Test-IsElevated<\/strong>: Determina se o script \u00e9 executado com privil\u00e9gios de administrador.<\/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\"><strong>Get-QueryUser<\/strong>: Obt\u00e9m uma lista de usu\u00e1rios conectados usando o comando do Windows <strong>query.exe user<\/strong> e, em seguida, formata essa sa\u00edda para facilitar o consumo pelo PowerShell.<\/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\"><strong>Bloco de processo<\/strong>: As principais opera\u00e7\u00f5es ocorrem aqui:<\/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\"><strong>Verifica\u00e7\u00e3o de permiss\u00e3o<\/strong>: Verifica se o script est\u00e1 sendo executado com privil\u00e9gios administrativos usando <strong>o Test-IsElevated<\/strong>.<\/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\"><strong>Consulta de sess\u00e3o<\/strong>: Recupera todos os usu\u00e1rios conectados por meio de <strong>Get-QueryUser<\/strong>.<\/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\"><strong>Encerramento da sess\u00e3o<\/strong>: Itera pela lista de usu\u00e1rios conectados. Se o nome de usu\u00e1rio corresponder ao par\u00e2metro <strong>$User<\/strong> fornecido e n\u00e3o for uma sess\u00e3o de console, o usu\u00e1rio ser\u00e1 desconectado usando <strong>o logoff.exe<\/strong>.<\/li>\n<\/ul>\n<h2>Casos de uso em potencial<\/h2>\n<p>Imagine um cen\u00e1rio em que um administrador de TI de uma grande organiza\u00e7\u00e3o observa um aumento inesperado no uso de recursos fora do hor\u00e1rio comercial. Eles identificam v\u00e1rias sess\u00f5es de usu\u00e1rio que foram deixadas ativas e precisam ser encerradas para liberar recursos. Em vez de fazer o logoff dos usu\u00e1rios manualmente, nosso script pode ser implementado em v\u00e1rias m\u00e1quinas, encerrando rapidamente as sess\u00f5es desnecess\u00e1rias.<\/p>\n<h2>Compara\u00e7\u00f5es<\/h2>\n<p>Os m\u00e9todos tradicionais, como o uso do Gerenciador de Tarefas ou da GUI do Windows, exigem esfor\u00e7o manual e n\u00e3o s\u00e3o escalon\u00e1veis em v\u00e1rias m\u00e1quinas. Embora existam ferramentas de terceiros dispon\u00edveis, o uso do PowerShell nativo garante a aus\u00eancia de sobrecarga de software adicional e melhor compatibilidade.<\/p>\n<h2>Implica\u00e7\u00f5es<\/h2>\n<p>O gerenciamento inadequado da sess\u00e3o pode levar a vulnerabilidades de seguran\u00e7a. Entidades mal-intencionadas podem explorar sess\u00f5es ativas para obter acesso n\u00e3o autorizado. Ao garantir que apenas as sess\u00f5es necess\u00e1rias permane\u00e7am ativas, o script contribui significativamente para a seguran\u00e7a de TI.<\/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\">Sempre execute o script com privil\u00e9gios de administrador.<\/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\">Antes de executar em um ambiente ativo, teste o script em uma configura\u00e7\u00e3o controlada para garantir que ele se comporte conforme o esperado.<\/li>\n<\/ul>\n<h2>Considera\u00e7\u00f5es finais<\/h2>\n<p>Quando se trata de gerenciar com efici\u00eancia as sess\u00f5es de usu\u00e1rio em um ambiente Windows, o PowerShell oferece solu\u00e7\u00f5es robustas e vers\u00e1teis. Este script apresenta apenas uma parte de seus recursos. Para aqueles que buscam uma plataforma integrada para simplificar essas tarefas, <a href=\"https:\/\/www.ninjaone.com\/pt-br\/\">a NinjaOne<\/a> oferece um conjunto abrangente de ferramentas que se integram perfeitamente a scripts como esse, garantindo <a href=\"https:\/\/www.ninjaone.com\/pt-br\/gestao-ti-empresarial\/infraestrutura\/\">o gerenciamento ideal da infraestrutura de TI<\/a>.<\/p>\n","protected":false},"author":35,"featured_media":144261,"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":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[12435],"class_list":["post-810196","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\/810196","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=810196"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/media\/144261"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/media?parent=810196"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/operating_system?post=810196"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/use_cases?post=810196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}