アップデート
@ HAL9256
あなたの答えは本当に私を考えさせました!
さらにグーグルで調べたところ、別のアプローチを提供するこのWebサイトが見つかりました
これまでのところ、うまくいきます!
最後にログオンしたユーザーを表示する powershell スクリプトを実行するために、別のサーバーにリモート接続します。
いくつかのこと
- 管理者ではなく、サービスアカウントのコンテキストで実行した場合にのみ機能します
- 出力には数分かかります
しかし、サービス アカウントのコンテキストで実行すると、同じ入力に対して異なる出力が得られます
$line_array = @()
$multi_array = @()
[hashtable]$my_hash = @{}
foreach ($i in $args){
$line_array+= $i.split(" ")
}
foreach ($j in $line_array){
$multi_array += ,@($j.split("="))
}
foreach ($k in $multi_array){
$my_hash.add($k[0],$k[1])
}
$Sender_IP = $my_hash.Get_Item("sender-ip")
$eventList = @()
Get-EventLog "Security" -computername $Sender_IP `
| Where -FilterScript {$_.EventID -eq 4624 -and $_.ReplacementStrings[4].Length -gt 10 -and $_.ReplacementStrings[5] -notlike "*$"} `
| Select-Object -First 2 `
| foreach-Object {
$row = "" | Select UserName, LoginTime
$row.UserName = $_.ReplacementStrings[5]
$row.LoginTime = $_.TimeGenerated
$eventList += $row
}
$userId = $eventList[0].UserName
$userId
たとえば、コマンドラインでスクリプトを呼び出します
script.ps1 "sender-ip=10.10.10.10"
初めて実行すると、ユーザーのウィンドウのログオン名が出力されます
同じ入力で同じスクリプトを 2 回目に実行すると、powershell スクリプトの実行に使用したのと同じサービス アカウントが出力されます。
そして、同じ入力で同じスクリプトを実行しようとすると、この同じサービス アカウントの出力が得られます。
~~~~~~~
次に、別の IP アドレスでスクリプトを実行してみます
初めてスクリプトを実行すると、ウィンドウのログオン名が出力されます
スクリプトを 2 回目に実行すると、powershell スクリプトが実行されているのと同じサービス アカウントが出力されます。
~~~~~~~
これがパターンのようです。スクリプトを初めて実行すると正しい入力が返され、2 回目に実行するとサービス アカウントが返されます。
なぜこうなった?
スクリプトが何度呼び出されても常に正しい出力を返すようにする方法は?
これをトラブルシューティングする方法は?