web-dev-qa-db-ja.com

Powershell-スクリプトを呼び出したユーザーを検索します

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は、コマンドが実行されたユーザーなどを漠然と覚えているので、これは可能でしょうか?

ありがとう!サンジーブ

15
Sanjeev

興味深い質問です。私は、ユーザーを次のようにするための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を区別しました。したがって、スクリプトを実行しているユーザーに提供されます。

26
manojlds