发布
社区首页 >问答首页 >使用PowerShell检查新创建的本地管理员

使用PowerShell检查新创建的本地管理员
EN

Stack Overflow用户
提问于 2021-04-07 00:52:19
回答 1查看 45关注 0票数 1

因此,正如标题所说:我正在尝试编写一个PowerShell脚本,该脚本检查是否有任何用户帐户已添加到本地管理员组中,或者是否已被添加为本地计算机上的管理员。我一直在使用Get-EventLog和Get-WinEvent来尝试完成我想要做的事情。我遇到的问题是从事件日志中隔离或提取我想要的信息。

这就是我到目前为止所知道的:

代码语言:javascript
代码运行次数:0
复制
$Date = ((Get-Date).AddDays(-1)).Date

$Events = Get-WinEvent -FilterHashtable @{
     StartTime = $Date
     LogName = 'Security'
     ProviderName = 'Microsoft-Windows-Security-Auditing'
     ID = 4732
    }

我想,如果我可以获得添加的帐户的用户名、它被授予的组或权限以及它的创建日期,我就可以有选择地输出过去24小时内每个日志的信息。我不确定我是应该尝试使用Get-Item还是Get-Content,或者是否应该尝试使用其他方法来解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2021-04-07 04:28:26

除非您安装了powershell v6.0+,否则您将需要使用-FilterXPath

代码语言:javascript
代码运行次数:0
复制
$Alerts = Get-WinEvent -LogName Security -FilterXPath @'
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[
        EventID=4732 and 
        TimeCreated[timediff(@SystemTime) &lt;= 604800000]]] and 
        *[EventData[Data[@Name="TargetDomainName"]='BUILTIN']] and 
        *[EventData[Data[@Name='TargetUserName']='Administrators']]
    </Select>
  </Query>
</QueryList>
'@ 

如果您运行的是PowerShellV6.0或更高版本,则可以使用-FilterHashTable。我会使用类似这样的东西来检查这些事件。我的服务器并不都有v6,所以我必须远程运行它,如下所示:

代码语言:javascript
代码运行次数:0
复制
#Requires -Version 6.0
$alerts = Get-WinEvent -ComputerName $computername -FilterHashtable @{
    StartTime = ((Get-Date).AddDays(-1)).Date
    LogName = 'Security'
    ProviderName = 'Microsoft-Windows-Security-Auditing'
    ID = 4732
    TargetDomainName='Builtin'       ## These fields require
    TargetUserName='Administrators'  ## Powershell v6.0+
}

我将介绍如何将事件日志的本地SID转换为用于报告的用户名,因为这很麻烦

代码语言:javascript
代码运行次数:0
复制
# Process event(s)
if ($alerts) { foreach ($event in $alerts) {
    # Try and convert SID to account name:
    $sid = $event.Properties[1].Value.Value
    $localuser = ([System.Security.Principal.SecurityIdentifier]::new($sid)
        ).Translate([System.Security.Principal.NTAccount])).Value
    }
    # Use SID in case of failure
    if (!$localuser){$localuser=$event.Properties[1].Value}

    # Example action
    Write-Warning "User $localuser added to local Administrators group on $computername by user $($event.Properties[7].Value)\$($event.Properties[6].Value)"
}}

# Outputs
WARNING: User Server01\local-user01 added to local Administrators group on Server01 by user DOMAIN\AdminUser01
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66973051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档