通过Powershell远程访问Get-WinEvent

问题描述:

我有一个非管理员访问服务器。我被允许通过RDP连接,并使用PowerShell远程处理。当我从RDP会话调用以下PowerShell命令时:通过Powershell远程访问Get-WinEvent

Get-WinEvent -MaxEvents 100 -Provider Microsoft-Windows-TaskScheduler 

我按预期得到100条记录。

当我做同样通过PowerShell远程处理,通过调用我的本地机器如下:

invoke-command -ComputerName myserver {Get-WinEvent -MaxEvents 100 -Provider Microsoft-Windows-TaskScheduler } 

我得到一个错误:

No events were found that match the specified selection criteria.

  • CategoryInfo : ObjectNotFound: (:) [Get-WinEvent], Exception
  • FullyQualifiedErrorId : NoMatchingEventsFound,Microsoft.PowerShell.Commands.GetWinEventCommand

任何想法,为什么?远程PowerShell会话应该在相同的凭据下运行,对吧?

编辑:whoami确实显示RDP登录和PowerShell远程处理之间的安全上下文的差异 - 组集是不同的。在RDP登录会话,有令牌中的以下组:

  • BUILTIN \远程桌面用户
  • NT AUTHORITY \远程交互式登录

而在远程的一个,有

  • 控制台登录

这腠ld帐户的权利的差异...

编辑:从注册表中,它看起来像任务调度程序日志不知何故是系统日志的一部分。根据MS KB article Q323076,系统日志的安全描述符可以在HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System下找到,值CustomSD。我无法检查有问题的服务器,但在另一个我是管理员的服务器上,该密钥下没有CustomSD。在HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System\Microsoft-Windows-TaskScheduler下,也没有。只有安全日志才能获得CustomSD。接下来的问题是,默认的SD在哪里?

C:\Windows\System32\winevt\LogsMicrosoft-Windows-TaskScheduler%4Operational.evtx的实际日志文件的权限无关紧要,无论如何该访问由EventLog服务调解。

+0

这指定服务器在那里我有管理员PRIVS命令时,我的作品...... –

+0

我也有运行这两个命令,没有问题。你使用的是什么版本的PowerShell?调用时运行的任何get-WinEvent命令是否工作? – smwk

+0

远程处理?它不,甚至没有针对应用程序日志。看起来粘滞点是nonadmin ... –

如果您不是远程计算机的管理员,并且invoke-command -ComputerName myserver {whoami /all}告诉您是您期望的人。

您将需要成为远程计算机上的事件日志读取器组的一部分。

以及远程管理用户组,我相信你已经是。

如果你需要阅读的安全日志,您还需要管理审核和安全日志下本地安全策略 - >安全设置 - >本地策略 - >用户权利指派

+0

Whoami确认我作为我的主帐户连接,没有惊喜:)我可以通过RDP连接到相同的帐户时读取日志很好。为什么我的远程PowerShell会话的安全上下文与RDP登录有什么不同? –

+0

好问题,我能够重现这种情况。作为本地用户,在计算机上登录,除非明确拒绝,否则您具有对事件日志的读/写访问权限(不是创建/删除)。但是,我怀疑这种访问不能远程扩展,尝试在远程PC上加载事件日志,并且访问级别都会失败,访问被拒绝。另一方面,您只需要成为“事件日志读取器”和“远程管理用户”组的一部分,以便能够远程读取日志,不需要本地用户访问,但这不会为您提供写入权限。 –

+0

与使用远程事件日志服务相反,日志读取cmdlet是否作为目标计算机上的本地进程运行?整个想法是使用powershell remoting作为网络传输,以便应用本地权限,而不是事件日志自己的网络传输。另外,从技术上讲,RDP也很遥远。这就是“R”代表:) –

Default ACLs on Windows Event Logs @ MSDN blog,在Windows Server 2003+,系统日志的默认ACL如下:

O:BAG:SYD: 
*(D;;0xf0007;;;AN) // (Deny) Anonymous:All Access 
*(D;;0xf0007;;;BG) // (Deny) Guests:All Access 
    (A;;0xf0007;;;SY) // LocalSystem:Full 
    (A;;0x7;;;BA)  // Administrators:Read,Write,Clear 
    (A;;0x5;;;SO)  // Server Operators:Read,Clear 
    (A;;0x1;;;IU)  // INTERACTIVE LOGON:Read <=================== 
    (A;;0x1;;;SU)  // SERVICES LOGON:Read 
    (A;;0x1;;;S-1-5-3) // BATCH LOGON:Read 
    (A;;0x2;;;LS)  // LocalService:Write 
    (A;;0x2;;;NS)  // NetworkService:Write 

NT AUTHORITY \ INTERACTIVE LOGON是否包含RDP登录?我发现了一个论坛消息,说这样,但我最好找到一个文档,以达到这种效果......

该文章声称此ACE来源于“直接从源代码”。所以它在服务中是硬编码的,有机会通过注册表进行更改。

您需要本地管理员权限才能打开PowerShell会话。

但是有一个解决方法/备选位置:

https://4sysops.com/archives/powershell-remoting-without-administrator-rights/