Подтвердить что ты не робот

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 записывает, какой пользователь запускает команду из и т.д., Так что это должно быть возможно?

Спасибо! Санджив

4b9b3361

Ответ 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.