{"id":208551,"date":"2024-01-22T16:03:39","date_gmt":"2024-01-22T16:03:39","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/so-ueberwachen-sie-die-letzte-anmeldung-eines-benutzers-mit-powershell\/"},"modified":"2025-02-16T13:59:32","modified_gmt":"2025-02-16T13:59:32","slug":"so-ueberwachen-sie-die-letzte-anmeldung-eines-benutzers-mit-powershell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/de\/script-hub\/so-ueberwachen-sie-die-letzte-anmeldung-eines-benutzers-mit-powershell\/","title":{"rendered":"So \u00fcberwachen Sie die letzte Anmeldung eines Benutzers mit PowerShell"},"content":{"rendered":"<p>Eine der wichtigsten Aufgaben des modernen IT-Managements ist die \u00dcberwachung von Benutzerkonten, insbesondere die Identifizierung inaktiver Konten. Bei diesem Unterfangen geht es um mehr als nur um die Haushaltsf\u00fchrung. Sie steht in direktem Zusammenhang mit Sicherheit, Einhaltung von Vorschriften und effizienter Ressourcenverwaltung. Heute befassen wir uns mit einem PowerShell-Skript, das\u00a0die <strong>\u00dcberwachung der letzten Anmeldung eines Benutzers<\/strong>erm\u00f6glicht<\/p>\n<h2>Hintergrund<\/h2>\n<p>Das bereitgestellte Skript dient dazu, Benutzerkonten auf der Grundlage ihrer letzten Anmeldezeit zu identifizieren und einen Bericht dar\u00fcber zu erstellen, insbesondere solche, die \u00fcber einen bestimmten Zeitraum nicht benutzt wurden. F\u00fcr IT-Experten und <a href=\"https:\/\/www.ninjaone.com\/de\/was-ist-ein-msp\">Managed Service Provider (MSPs<\/a>) ist es von entscheidender Bedeutung, dass ungenutzte Konten identifiziert und verwaltet werden. Ruhende Konten stellen ein Sicherheitsrisiko dar und sind oft ein leichtes Ziel f\u00fcr Cyberkriminelle. F\u00fcr Unternehmen, die Compliance-Vorschriften einhalten m\u00fcssen, kann es au\u00dferdem erforderlich sein, die Benutzeraktivit\u00e4ten zu verfolgen und ungenutzte Konten zu deaktivieren.<\/p>\n<h2>Das Skript<\/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;\">Zugriff auf \u00fcber 300 Skripte im NinjaOne Dojo<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.ninjaone.com\/de\/kostenlosetestversionformular\/\">Zugang erhalten<\/a><\/p>\n<\/div>\n<h2>Detailansicht<\/h2>\n<p>Das Skript beginnt mit einer Standarddauer von 90 Tagen f\u00fcr die Pr\u00fcfung auf Inaktivit\u00e4t. Anschlie\u00dfend wird entweder das Cmdlet &#8222;Get-LocalUser&#8220; oder der Befehl &#8222;net.exe user&#8220; verwendet, je nachdem, was verf\u00fcgbar ist.<\/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\">Wenn das Cmdlet &#8222;Get-LocalUser&#8220; vorhanden ist, holt es die Details direkt ab.<\/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\">Ist dies nicht der Fall, wird auf den Befehl &#8222;net.exe user&#8220; zur\u00fcckgegriffen. Dieser Befehl ruft die Daten ab und verarbeitet dann die Ausgabe, um die gew\u00fcnschten Details herauszufiltern.<\/li>\n<\/ul>\n<p>Die prim\u00e4re Logik besteht darin, zu pr\u00fcfen, ob das letzte Anmeldedatum jedes Benutzers \u00e4lter ist als der festgelegte Schwellenwert. Wenn eine \u00dcbereinstimmung gefunden wird, wird sie angezeigt, und das Skript wird mit einem Code von 1 beendet. Ein Exit-Code von 2 wird f\u00fcr Ausnahmen beim Abrufen von Benutzerdaten verwendet.<\/p>\n<h2>Potenzielle Anwendungsf\u00e4lle<\/h2>\n<p>Stellen Sie sich Jane vor, eine IT-Fachkraft in einem mittelst\u00e4ndischen Unternehmen. K\u00fcrzlich hatte das Unternehmen mit einer kleineren Sicherheitsverletzung zu k\u00e4mpfen. Nach dem Vorfall wurde Jane damit beauftragt, die Sicherheitsvorkehrungen zu verst\u00e4rken. Einer der Vorschl\u00e4ge war, regelm\u00e4\u00dfig nach inaktiven Konten zu suchen und diese zu deaktivieren. Mit diesem Skript kann sie eine monatliche Routine einrichten, um eine Liste solcher Konten abzurufen und sicherzustellen, dass das Benutzerverzeichnis des Unternehmens aktiv und sicher bleibt.<\/p>\n<h2>Vergleiche<\/h2>\n<p>W\u00e4hrend das Skript die PowerShell nutzt, k\u00f6nnte ein anderer Ansatz darin bestehen, das Active Directory (falls verf\u00fcgbar) direkt nach Benutzerkontodetails abzufragen. Es k\u00f6nnen Tools wie ADManager Plus oder sogar das integrierte Active Directory Users and Computers (ADUC) verwendet werden. Unser Skript bietet jedoch eine leichtgewichtige, anpassbare und kostenlose Alternative.<\/p>\n<h2>FAQs<\/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>Was ist, wenn ich nach einer anderen Dauer der Inaktivit\u00e4t suchen m\u00f6chte?<\/strong><br \/>\nSie k\u00f6nnen den Parameter $Days anpassen.<\/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>Kann das Skript sowohl aktivierte als auch deaktivierte Konten erkennen?<\/strong><br \/>\nJa, mit der Option -IncludeDisabled kann das Skript sowohl aktivierte als auch deaktivierte Konten abrufen.<\/li>\n<\/ul>\n<h2>Auswirkungen<\/h2>\n<p>Neben der Identifizierung ruhender Konten hat dieses Skript auch Auswirkungen auf die IT-Sicherheit. Inaktive Konten k\u00f6nnen leicht kompromittiert werden, so dass Unbefugte Zugang erhalten. Regelm\u00e4\u00dfige \u00dcberpr\u00fcfungen der Inaktivit\u00e4t von Benutzern und entsprechende Ma\u00dfnahmen k\u00f6nnen m\u00f6gliche Verst\u00f6\u00dfe verhindern.<\/p>\n<h2>Empfehlungen<\/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\">Testen Sie das Skript immer in einer abgeschotteten Umgebung, bevor Sie es weitreichend implementieren.<\/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\">Planen Sie die Ausf\u00fchrung dieses Skripts in regelm\u00e4\u00dfigen Abst\u00e4nden, um eine kontinuierliche \u00dcberwachung zu gew\u00e4hrleisten.<\/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\">Nach Identifizierung von inaktiven Konten sollten entsprechende Ma\u00dfnahmen ergriffen werden, wie beispielsweise das Deaktivieren des Kontos oder die Benachrichtigung des Benutzers oder seines Managers.<\/li>\n<\/ul>\n<h2>Abschlie\u00dfende \u00dcberlegungen<\/h2>\n<p>W\u00e4hrend das Skript eine effiziente L\u00f6sung darstellt, kann die Integration von Tools wie <a href=\"https:\/\/www.ninjaone.com\/de\/\">NinjaOne<\/a> die M\u00f6glichkeiten weiter verbessern, indem Aufgaben automatisiert werden und ein <a href=\"https:\/\/www.ninjaone.com\/de\/endpunkt-verwaltung\">zentrales Dashboard f\u00fcr das Management<\/a>bereitgestellt wird. Tools wie NinjaOne sind darauf ausgelegt, solche Aufgaben effizient zu erledigen, so dass sich IT-Experten wie Jane auf strategischere Aufgaben konzentrieren k\u00f6nnen, indem sie Skripte wie das obige als Teil eines umfassenderen Toolkits nutzen.<\/p>\n","protected":false},"author":35,"featured_media":144296,"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":[4309],"class_list":["post-208551","script_hub","type-script_hub","status-publish","has-post-thumbnail","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub\/208551","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/comments?post=208551"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media\/144296"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media?parent=208551"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/operating_system?post=208551"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/use_cases?post=208551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}