获取每个服务器的登录用户列表

获取每个服务器的登录用户列表

我正在寻找一种查询 Active Directory 或 SMS 之类的方法,以便我可以获取已登录多台服务器的 Windows 服务器的用户列表。这就像检查 Linux 上的 lastlog 文件一样。除了用户名之外,我不需要时间或其他任何东西。

输出内容非常简单,例如:SERVERNAME: shatnerw, nimoyl, kelleyd,

任何关于此问题的意见都很好。即使是“在 VB 脚本中使用此函数”。

谢谢,ablackhat

编辑:到目前为止,我发现信息位于注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList。它有 guid,这很好。现在我需要想办法远程查询它。

答案1

如果您只想要配置文件列表,PowerShell 可能是您的最佳选择。

$Server = 'RemoteServer'
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)

这将实例化 $reg 作为 HKLM 中远程注册表对象的持有者。要获得所需的位:

$ProfileList = $Reg.OpenSubKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList')

这将使用配置文件本身的子键填充 $ProfileList。然后提取用户列表:

Write-Host "`n$Server: " -nonewline
ForEach ($SID in $ProfileList.GetValueNames()) {
    $ProfileKey = $ProfileList.OpenSubKey($SID)
    # Get the ProfileImagePath key
    $ProfileKey.GetValue("ProfileImagePath")
    # Break the path up into an array, using \ as the delimiter
    $PathBits = $ProfileKey.Split("\")
    # The last element of the array is our user, find the last element
    $LastIndex = $PathBits.Count - 1
    # Dump the last element to something useful
    $User = $PathBits[$LastIndex]
    # Output the user
    write-host " $User" -nonewline
}

或者类似的东西。这是我突然想起来的东西。

答案2

创建一个适用于您要监控的服务器的 GPO,并在计算机配置 > 策略 > Windows 设置 > 安全设置 > 本地策略 > 审核策略下,根据您的要求在成功和/或失败时启用“审核登录事件”。

如果您监控的服务器是 DC,请不要启用审核帐户登录事件。当有人使用其域用户帐户登录时,域控制器上会生成帐户登录事件,因此您会看到太多事件。

简而言之,当用户登录计算机时会创建“登录事件”,当用户使用其域用户帐户登录时,会在域控制器上创建“帐户登录事件”,但他们登录的计算机也会以交互方式生成帐户登录事件。这就是您要监视的内容。结合 EventForwarding(适用于您的功能强大的服务器),您可以监视自己的事件日志或使用 SNMP 陷阱来捕获事件并将evntwin.exe其转发到 SNMP 监视/警报系统。

在用户工作站上,我实际上使用 VBScript,它会打开一个隐藏的 IE 进程,进入安装了 PHP/MySQL 的内部服务器,该服务器只需将用户名转储到数据库中即可。VBScript:

Set oIE = CreateObject("InternetExplorer.Application")
Set oNet = CreateObject("WScript.Network")

sComputerName = oNet.ComputerName
sUsername = oNet.UserName

oIE.Navigate "http://intranet/logon/logon.php?un=" & Trim(sUsername) & "&ma=" & Trim(sComputerName)

Do While oIE.Busy = True

WScript.Sleep 500

Loop

oIE.Quit
Set oIE = Nothing
WScript.Quit

显然,您需要 Web 服务器、PHP 和 MySQL 数据库才能实现此功能,因此如果您对此感兴趣,请告诉我,我也会挖掘出这些内容。您也可以使用 GPO 应用此功能,但有一个警告,它只能在 GPO 的用户配置部分下运行。

所以,您有两个选择。HTH。

编辑:这是上面提到的 PHP 脚本。非常简单。

mysql_connect('mysqlserver', 'username', 'password');
mysql_select_db('database');

$un = trim(addslashes($_GET['un']));
$ma = trim(addslashes($_GET['ma']));

mysql_query("INSERT INTO userlist (user_logon_name, machine_name, logon_time) VALUES ('$un', '$ma', now())");

echo "User ". $_GET['un']. " logged on.";

干杯

相关内容