Powershell

確定使用者以前登錄過哪些工作站

  • August 9, 2016

我想找到一種方法來確定使用者帳戶已登錄到哪些工作站或伺服器。

是否有可以掃描 DC 以獲取此資訊的腳本?

或者,使用者登錄的任何 PC 上都應該有他們的使用者配置文件。有沒有辦法掃描使用者配置文件文件夾?儘管我認為這並不完美,因為命名約定並不總是相同的。

基本上我只需要看看 UserA 是否已經登錄到除了他們自己的任何工作站或伺服器。還有其他建議嗎?

除非您已經有審計產品,否則沒有快速簡便的方法可以做到這一點。這是我過去必須做的事情。

查找使用者已登錄的工作站/伺服器

您要查找的資訊類型未保存在目錄中。我知道在沒有工具設置的情況下執行此操作的唯一方法是搜尋所有域控制器上的安全日誌。您正在查找事件 ID 4624。一旦您為此過濾了日誌,甚至可以執行查找您所質疑的安全 ID。對於我的域,日誌的格式為 netbios\samAccountName。登錄類型 2 表示互動式登錄(物理上使用鍵盤/滑鼠),登錄類型 3 表示“模擬”(例如,rdp)。在網路資訊下,您應該有工作站名稱和 IP 地址。

以下是有關事件 ID 4624 的更多資訊:https ://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4624

在機器上搜尋配置文件

首先,如果您走這條路,我強烈建議您針對非常特定的機器。這將是一個非常耗時的過程,並且依賴於一些存在的條件才能工作。也就是說,您需要成為目標的管理員並且需要啟用管理共享(例如 \computername\c$)。

您可以在 powershell 中嘗試以下操作。請注意,您將需要一個機器列表(每台機器的 FQDN)、相關使用者的 samAccountName 以及相關域的 netbios。這是基於 Windows 7+ 的電腦的快速範例。添加其他路徑很容易。該腳本將列印出任何找到配置文件路徑的電腦。

foreach($computer in $computers){
   $tempPath1 = "\\" + $computer + "\c$\Users\" + $samAccountName + "\"
   $tempPath2 = "\\" + $computer + "\c$\Users\" + $samAccountName + "." + $domainNetBios + "\"
   if((Test-Path $tempPath1) -or (Test-Path $tempPath2)){
       Write-Output $computer
   }
}

額外信用:檢查您找到的路徑的 ACL 並查看是否包含該使用者。

編輯:這是目前登錄會話的另一種方法 https://blogs.technet.microsoft.com/heyscriptingguy/2011/06/04/use-powershell-to-find-logon-sessions/

引用自:https://serverfault.com/questions/795585