用户与计算机的关系

Tia*_*rte 3 powershell active-directory

我已经多次使用 Get-ADUser 和 Get-ADComputer 来帮助解决系统中的问题。

我已经看到了通过注册表、PsLoggedon.exe其他脚本来识别哪个用户登录到特定机器的几种方法,但由于我不是真正的网络管理员,我经常被拒绝访问。这很好,因为我对挖掘那么深并不感兴趣。

我所需要的只是以某种方式确定哪些用户在一台机器上有一个帐户(配置文件)(或哪些机器有一个用户帐户),这样我就可以联系他们并在他们的 IP 地址出现异常时帮助他们。

这两个开箱即用的对象之间绝对没有关系吗?

Eva*_*son 6

这些对象之间绝对没有“开箱即用”的关系。Windows 8 / Windows Server 2012 引入了“主计算机” Active Directory 架构属性的概念,但我非常怀疑您是否会发现它正在被使用。

在远程机器上获取登录用户是其中之一,听起来应该很容易,但实际上并非如此。

我认为您将不得不从您的网络管理人员那里获得一些合作才能可靠地获得您正在寻找的东西。通过“正常方式”(psloggedonWMI 查询、远程注册表访问)远程查询登录用户信息将要求您在远程计算机上拥有本地管理员权限,或者更改默认值以授予您的非管理员权限上下文正确。

开始谈论“黑客”:我可以想象一个场景,您的异常处理程序尝试将用户的浏览器重定向到需要 NTLM 身份验证的页面,并且如果客户端配置为自动尝试使用登录用户的凭据进行身份验证,您可以通过这种方式“获取”凭证。我还可以看到网络管理人员如何将其严重误解为对用户的攻击,因此我强烈建议不要这样做。

据推测,您正在管理一个 web 应用程序,但不是网络管理人员的一部分。如果您可以让网络管理人员购买将您的 Web 服务器加入域中,您可以启用身份验证,此时您将知道远程用户的用户名,而不必考虑任何这些 IP 地址。如果您的客户端配置正确,则身份验证也可以透明地进行。


Mat*_*sen 5

Windows 计算机上的现有配置文件列在以下注册表项中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Run Code Online (Sandbox Code Playgroud)

它包含每个用户配置文件的子密钥,每个子密钥的名称通过安全标识符标识相应的用户。

您可以通过枚举子项并将所有用户 SID 转换为相应的帐户对象来“发现”用户配置文件:

$profileList = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
# Retrieve subkeys that represent user profiles
$UserProfiles = Get-ChildItem $profileList |? {$_.Name -like "*S-1-5-21-*"}

foreach($Profile in $UserProfiles)
{
    $ntAccType = [System.Security.Principal.NTAccount] -as [Type]
    $userSid = ($Profile.Name-split"\\")[-1]
    try{
        # Attempt to translate the SID to an NTAccount object
        (New-Object System.Security.Principal.SecurityIdentifier $userSid).Translate($ntAccType)
    } catch {"Translating SID $userSid to Account failed"}
}
Run Code Online (Sandbox Code Playgroud)