Powershell-查找调用脚本的用户

Powershell-查找调用脚本的用户,powershell,powershell-2.0,powershell-remoting,Powershell,Powershell 2.0,Powershell Remoting,我有一个脚本(我们称之为myPSScript.ps1),它接受两个参数并执行预定义的步骤。脚本位于Windows服务器框中,用户可以在其中登录并执行脚本。支持两个用户在给定时间登录 我想知道是谁调用了脚本 (Get-WmiObject -Class Win32_Process | Where-Object {$_.ProcessName -eq 'explorer.exe'}).GetOwner() | Format-Table Domain, User 当用户当前登录并尝试运行该脚本时,此

我有一个脚本(我们称之为myPSScript.ps1),它接受两个参数并执行预定义的步骤。脚本位于Windows服务器框中,用户可以在其中登录并执行脚本。支持两个用户在给定时间登录

我想知道是谁调用了脚本

(Get-WmiObject -Class Win32_Process | Where-Object {$_.ProcessName -eq 'explorer.exe'}).GetOwner() | Format-Table Domain, User 
当用户当前登录并尝试运行该脚本时,此操作有效。但是,如果我在计划任务中有一个批处理文件,并且运行相同的脚本呢

在这种情况下,相同的命令返回一个null异常,因为没有人登录到机器

是否有办法找出谁/哪个进程调用了powershell脚本。我模模糊糊地记得Start Transcript记录了从哪个用户运行命令等,所以这应该是可能的

谢谢!
桑耶夫

有趣的问题。我用三种不同的方法编写了一个脚本,让用户喜欢这样:

([Environment]::UserDomainName + "\" + [Environment]::UserName) | out-file test.txt
"$env:userdomain\$env:username" | out-file -append test.txt
[Security.Principal.WindowsIdentity]::GetCurrent().Name | out-file -append test.txt
notepad test.txt
将其保存为test.ps1,并使用
runas
as调用它:

runas /user:domain\user "powershell e:\test.ps1"

我在输出中三次都得到了domain\user。使用
runas
来区分我作为(me!!)登录的用户和我作为运行它的域\用户。因此,它确实为运行脚本的用户提供了帮助。

Perfect。当使用来自不同机器和不同用户的Invoke命令触发脚本时,这也可以工作——这正是我所要寻找的。现在我可以审核谁做什么以及何时做:)还有一个问题。假设某人使用域用户登录到windows服务器。在这种情况下,脚本为我们提供了域用户,但当它由多个人使用时,这是没有帮助的。终端服务管理器显示客户端名称,该名称是用户从中连接的客户端的名称。有没有办法获取该信息?使用PSTerminalServices模块是获取该信息的选项之一。