我正在使用gpedit.msc脚本进行登录/注销/关机/启动事件。 以下PowerShell脚本在这些事件上运行:
$web = New-Object System.Net.WebClient
[String] ${stUserDomain},[String] ${stUserAccount} = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.split("\")
$str = $web.DownloadString("https://srv4923/event.php?username=" + ${stUserAccount} + "&workstation=" + $env:ComputerName + "&event=" + $args[0])
$str
然后,PHP脚本在MySQL数据库中生成一个条目。 该脚本对于登录和注销事件非常有效,但是对于关机/启动事件,用户名不再是“ myusername”,而是“ SYSTEM”。 可以通过其他方式获取用户名来防止这种情况吗?我了解触发启动事件时,用户可能无法登录,因此没有可用的用户名。 但是当用户关闭机器或重新启动机器时,我们仍然应该知道是谁做的?
答案 0 :(得分:1)
至此...
“ ...关闭/启动事件... myusername”了,但是它是“ SYSTEM” ...
这不是PowerShell代码问题,而是设计要求的操作系统。
简单的答案是不,因为启动时永远不会有用户。它始终是SYSTEM,必须存在。在系统处于就绪状态之前,Windows MSGINA.dll不会启动,然后无论您是否决定使用自动登录,它都会为用户提供MSGINA登录。
您必须关联注销和关机事件,以获取关机前最后登录的用户。
但请记住,管理员可以像计划任务甚至断电或电气系统浪涌一样远程关闭系统。因此,即使存在这种相关性,也必须牢记这一点。