20

我有一个脚本(我们称之为 myPSScript.ps1),它接受两个参数并执行预定义的步骤。脚本位于人们登录并执行脚本的 Windows Server 框中。支持两个用户同时登录。

我想知道是谁调用了这个脚本。

(Get-WmiObject -Class Win32_Process | Where-Object {$_.ProcessName -eq 'explorer.exe'}).GetOwner() | Format-Table Domain, User 

这在用户当前登录并尝试运行脚本时有效。但是,如果我在计划任务中有一个批处理文件并运行相同的脚本怎么办?

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

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

谢谢!桑吉夫

4

1 回答 1

35

有趣的问题。我用三种不同的方式编写了一个脚本来获得这样的用户:

([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以下方式调用它:

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

而且我在输出中得到了域\用户全部三次。用于runas区分我登录的用户(我!!)和我运行它的域\用户。所以它确实给了运行脚本的用户。

于 2011-09-21T20:48:57.227 回答