使用RunAs用户和自动转录的约束端点无法正确记录调用用户

时间:2016-11-09 17:41:09

标签: powershell powershell-remoting powershell-v5.0

我已经使用RunAs用户创建了PowerShell会话配置。我可以使用Enter-PSSessionInvoke-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用户,但对会话进行身份验证的用户是不同的(我自己的帐户)。

我不认为这是应该如何工作的。我希望在“用户名”字段中看到我的用户。

我希望有人之前见过这个。

1 个答案:

答案 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用户)。

这几乎没有经过测试,它需要工作,但希望它可以作为一个起点并帮助某人。