Powershell在gpedit脚本中获取用户名

时间:2019-05-02 14:57:44

标签: powershell

我正在使用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”。 可以通过其他方式获取用户名来防止这种情况吗?我了解触发启动事件时,用户可能无法登录,因此没有可用的用户名。 但是当用户关闭机器或重新启动机器时,我们仍然应该知道是谁做的?

1 个答案:

答案 0 :(得分:1)

至此...

  

“ ...关闭/启动事件... myusername”了,但是它是“ SYSTEM” ...

这不是PowerShell代码问题,而是设计要求的操作系统。

简单的答案是不,因为启动时永远不会有用户。它始终是SYSTEM,必须存在。在系统处于就绪状态之前,Windows MSGINA.dll不会启动,然后无论您是否决定使用自动登录,它都会为用户提供MSGINA登录。

您必须关联注销和关机事件,以获取关机前最后登录的用户。

但请记住,管理员可以像计划任务甚至断电或电气系统浪涌一样远程关闭系统。因此,即使存在这种相关性,也必须牢记这一点。