2つのパラメーターを取り、事前定義されたステップを実行するスクリプト(myPSScript.ps1と呼びましょう)があります。スクリプトは、ユーザーがログインしてスクリプトを実行するWindowsServerボックスにあります。指定された時間にログインする2人のユーザーをサポートします。
誰がスクリプトを呼び出したか知りたいのですが。
(Get-WmiObject -Class Win32_Process | Where-Object {$_.ProcessName -eq 'Explorer.exe'}).GetOwner() | Format-Table Domain, User
これは、ユーザーが現在ログインしていて、スクリプトを実行しようとしているときに機能します。しかし、スケジュールされたタスクにバッチファイルがあり、同じスクリプトを実行した場合はどうなりますか?
その場合、マシンにログインしている人がいないため、同じコマンドがnull例外を返します。
誰/どのプロセスがPowerShellスクリプトを呼び出したかを確認する方法はありますか? Start-Transcriptは、コマンドが実行されたユーザーなどを漠然と覚えているので、これは可能でしょうか?
ありがとう!サンジーブ
興味深い質問です。私は、ユーザーを次のようにするための3つの異なる方法でスクリプトを作成しました。
([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"
そして、出力でdomain\userを3回すべて取得しました。 runas
を使用して、私がログインしているユーザー(me !!)とそれを実行していたdomain\userを区別しました。したがって、スクリプトを実行しているユーザーに提供されます。