Powershell - Найти пользователя, который вызвал скрипт - PullRequest
15 голосов
/ 21 сентября 2011

У меня есть скрипт (назовем его myPSScript.ps1), который принимает два параметра и выполняет предварительно определенные шаги. Скрипт находится в окне Windows Server, в которое люди входят и выполняют скрипт. Поддерживает двух пользователей для входа в данный момент.

Я хочу выяснить, кто вызвал скрипт.

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

Это работает, когда пользователь вошел в систему и пытается запустить скрипт. Но что, если у меня есть пакетный файл в запланированных задачах и запустить тот же сценарий?

В этом случае та же команда возвращает пустое исключение, поскольку никто не вошел в систему на машине.

Есть ли способ узнать, кто / какой процесс вызвал скрипт powershell. Я смутно помню записи Start-Transcript, от какого пользователя запускается команда и т. Д., Так что это должно быть возможно?

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

1 Ответ

26 голосов
/ 22 сентября 2011

Интересный вопрос.Я написал скрипт с тремя различными способами получить пользователя следующим образом:

([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, чтобы просто различать пользователя, в котором я вошел как (меня !!), и домен \ пользователь, с которым я его запускал.Так что он дает пользователю, который запускает скрипт.

...