我已经使用RunAs用户创建了PowerShell会话配置。我可以使用Enter-PSSession
和Invoke-Command
以及PowerShell Web Access连接到配置。它工作正常,并且似乎作为RunAs用户正确运行。
我还通过组策略启用了自动转录功能,因此会记录所有PowerShell会话。
PowerShell成绩单记录“用户名”和“RunAs用户”,据我所知,这完全符合这种情况。
但我遇到的问题是它将RunAs用户记录为两个用户,并且用于连接到会话的用户名不会记录在任何地方。
********************** Windows PowerShell transcript start Start time: 20161109123326 Username: DOM\adminuser RunAs User: DOM\adminuser Machine: HOSTMACHINE (Microsoft Windows NT 6.3.9600.0) Host Application: C:\Windows\system32\wsmprovhost.exe -Embedding Process ID: 4676 PSVersion: 5.0.10586.117 PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0.10586.117 BuildVersion: 10.0.10586.117 CLRVersion: 4.0.30319.42000 WSManStackVersion: 3.0 PSRemotingProtocolVersion: 2.3 SerializationVersion: 1.1.0.1 **********************
这是我的成绩单的顶部,用户名和机器名更改了。 DOM\adminuser
我们是RunAs用户,但对会话进行身份验证的用户是不同的(我自己的帐户)。
我不认为这是应该如何工作的。我希望在“用户名”字段中看到我的用户。
我希望有人之前见过这个。
答案 0 :(得分:0)
我想我想出来了。我非常确定RunAs User
字段适用于虚拟帐户(RunAsVirtualAccount
),如果您设置端点进行模拟,而不是真正使用RunAsCredential
。
不幸的是,虚拟帐户对我来说不起作用,因为它必须是本地帐户,我需要它来访问域。
我不是百分之百,所以除非得到确认,否则我不会接受我自己的答案,所以希望其他人有更多信息。
经过更多阅读后,我确信这是"预期"行为和以上是正确的。
为了完整性,我正在寻找的用户("调用者")被称为"连接用户"如果您要记录这些事件,则可在事件日志中使用。碰巧我发生了。事件包含进程的PID,也可以在成绩单中找到,因此从成绩单中,我可以读取PID,然后查找与之关联的所有事件。
这是一个非常粗略的代码片段:
[int]$logpid = gc $log | % {
if ($_ -match '^Process ID:\s(?<pid>\d+)') {
$Matches['pid']
}
} | Select-Object -First 1
$events = Get-WinEvent -ProviderName 'Microsoft-Windows-PowerShell' -FilterXPath "*[System[Execution[@ProcessID='$logpid']]]"
(其中$log
是成绩单文件的路径)。
这是另一个粗略的片段,它在一些事件(它的非结构化文本)中提供了多汁的信息[hashtable]
:
$infohash = $events[0].Properties[0].Value -split '\r?\n' |
% -b { $stuff = @{} } -p {
$kv = $_ -split '\s+=\s+'
$stuff[$kv[0].Trim(' ',"`t")] = $kv[1]
} -e { $stuff }
除此之外,您还可以使用$infohash.'Connected User'
查找与会话相关联的人,并$infohash.User
查看流程的身份(RunAs用户)。
这几乎没有经过测试,它需要工作,但希望它可以作为一个起点并帮助某人。