我有许多用户的 Windows XP 计算机,它们位于一个 IP 范围内,属于 Windows 2003 AD 的一部分。不幸的是,这些名称与用户名没有任何关系。有人知道我该如何编写脚本来获取用户名到计算机名称的映射吗?
我的域管理员帐户是所有(或几乎所有)盒子的本地管理员。所以我可能能够查询每个盒子(只有大约 40 个)。我愿意接受能为我提供部分解决方案的想法。例如,如果我只为 80% 的盒子获得此信息,或者只是最后一个登录的人。
如果可能的话,我很乐意从 Linux 编写该脚本。
答案1
所以你的用户永远不会在计算机之间移动,是吗?
Barracuda 过滤设备或 WebSense 等设备/系统通过在域控制器计算机上运行软件来监控登录并建立实时更新的登录用户数据库来处理此问题。
我想你可以使用登入SysInternals 实用程序,但您不会在 Linux 机器上运行它。
编辑:
假设路径中的“computers.txt”和“PsLoggedOn.Exe”中列出了计算机名称:
@echo off
for /F %%i in (computers.txt) do (
call :do_check %%i
)
goto end
:do_check
for /F "usebackq delims= " %%i in (`psloggedon \\%1 -x -l ^| find /v "NT AUTHORITY" ^| find /v "Users logged on locally"`) do echo %1,%%i
:end
将该脚本的输出发送到文件,您应该获得以下输出:
computername,username
...
每台计算机您可以接收多个响应,就像 Windows 是多用户的一样。
答案2
由于您使用的是活动目录域,因此您可以使用登录脚本来执行此操作,但如果只有 40 台机器,那么转到这些机器并手动执行此操作可能会更快,但请查看 hostname 命令和 %username% 变量
但我质疑这样做的必要性,因为大多数情况下,将计算机与用户分离是有好处的,通过使用漫游配置文件、重定向文件夹和组策略,您应该能够相当简单地做到这一点。我倾向于使用 BGInfo(免费从 sysinternals 下载)在桌面壁纸上显示计算机名称,以便用户可以在必要时在支持呼叫过程中向支持台报告他们的计算机名称。