20

2 つのパラメーターを取り、定義済みの手順を実行するスクリプト (myPSScript.ps1 と呼びましょう) があります。スクリプトは、ユーザーがログインしてスクリプトを実行する Windows Server ボックスにあります。同時に 2 人のユーザーのログインをサポートします。

誰がスクリプトを呼び出したのかを知りたい。

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

これは、ユーザーが現在ログインしていて、スクリプトを実行しようとしているときに機能します。しかし、スケジュールされたタスクにバッチ ファイルがあり、同じスクリプトを実行するとどうなるでしょうか。

その場合、マシンに誰もログインしていないため、同じコマンドは null 例外を返します。

誰が/どのプロセスがpowershellスクリプトを呼び出したかを調べる方法はありますか? コマンドが実行されたユーザーなどの Start-Transcript レコードを漠然と覚えているので、これは可能でしょうか?

ありがとう!サンジーブ

4

1 に答える 1

35

興味深い質問です。ユーザーを次のように取得する 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私がログインしているユーザー(私!!)と、それを実行していたドメイン\ユーザーを区別するために使用されます。したがって、スクリプトを実行しているユーザーが表示されます。

于 2011-09-21T20:48:57.227 に答える