Get-WinEvent通过Powershell远程处理

时间:2016-05-13 17:27:49

标签: powershell powershell-remoting

我拥有对服务器的非管理员权限。我允许通过RDP连接,并使用PowerShell远程处理。当我从RDP会话调用以下PowerShell命令时:

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

我按预期获得了100条记录。

当我通过PowerShell远程处理执行相同操作时,通过从本地计算机调用以下内容:

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

我收到错误:

  

未找到符合指定选择条件的事件。

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

知道为什么吗?远程PowerShell会话应该在相同的凭据下运行,对吗?

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

  • BUILTIN \远程桌面用户
  • NT AUTHORITY \ REMOTE INTERACTIVE LOGON

在遥远的时候,那里有

  • CONSOLE LOGON

这可以解释权利的差异......

编辑:从注册表中,看起来任务调度程序日志不知何故是系统日志的一部分。根据{{​​3}},可以在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服务调解的。

4 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

根据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“直接源于源代码”。所以它在服务中是硬编码的,有机会通过注册表进行更改。

答案 2 :(得分:0)

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

但是这里有一个解决方法/替代方案:

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

答案 3 :(得分:0)

我有这个问题最奇怪的变化,让我疯了! 从服务器W2008r2(以域管理员身份登录,在交互式PowerShell会话中)远程连接到工作站Win7以获取登录/注销事件:

invoke-command -computername $pc {Get-WinEvent -FilterHashtable @{logname='
Security';Id=@(4624,4634)}}
-> No events were found that match the specified selection criteria.

但是在Get-Winevent:

之前在scriptblock中输出空字符串时它确实有效
invoke-command -computername $pc {"";Get-WinEvent -FilterHashtable @{lognam
e='Security';Id=@(4624,4634)}}


TimeCreated             ProviderName                                 Id Message                 PSComputerName
-----------             ------------                                 -- -------                 --------------
19/03/2018 11:51:41     Microsoft-Windows-Se...                    4624 An account was succe... b25_x64
19/03/2018 11:51:41     Microsoft-Windows-Se...                    4624 An account was succe... b25_x64

在尝试所有内容后偶然发现了这个问题:Enter-Pssession,New-Pssession,使用-credential参数将预定义的凭据传递给invoke-command,以获取wine-to,以及两者。什么都没有用,给了#34;没有事件......&#34;在每一个组合中。
然后我在scriptblock中插入了一个$ cred来显示传递的凭证以进行调试,突然间我得到了我正在寻找的事件......