Powershell - найдите пользователя, который вызвал script
У меня есть script (пусть назовите его myPSScript.ps1), который принимает два параметра и выполняет предопределенные шаги. Script находится в окне Windows Server, в котором пользователи регистрируются и выполняют script. Поддерживает двух пользователей для входа в данный момент.
Я хочу узнать, кто вызвал script.
(Get-WmiObject -Class Win32_Process | Where-Object {$_.ProcessName -eq 'explorer.exe'}).GetOwner() | Format-Table Domain, User
Это работает, когда пользователь регистрируется в настоящее время и пытается запустить script. Но что делать, если у меня есть пакетный файл в запланированных задачах и запускается тот же script?
В этом случае одна и та же команда возвращает нулевое исключение, так как никто не зашел в систему.
Есть ли способ узнать, кто/какой процесс вызвал powershell script. Я смутно помню Start-Transcript записывает, какой пользователь запускает команду из и т.д., Так что это должно быть возможно?
Спасибо!
Санджив
Ответы
Ответ 1
Интересный вопрос. Я написал script тремя разными способами, чтобы получить такой пользователь:
([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
, чтобы просто различать пользователя, с которым я зарегистрировался как (me!!), и домена\пользователя, с которым я его запускал. Таким образом, это дает пользователю, который запускает script.