Powershell脚本审核远程桌面用户登录

时间:2019-02-21 00:55:29

标签: powershell remote-desktop audit

我找到了一个脚本,该脚本记录了RDS服务器的所有用户,效果很好;

Link here

但是我想使其仅针对1个用户,而不是所有用户。

我真的不知道powershell,所以需要一些帮助。

Param(
[array]$ServersToQuery = (hostname),
[datetime]$StartTime = "January 1, 1970"

foreach ($Server in $ServersToQuery) {

    $LogFilter = @{
        LogName = 'Microsoft-Windows-TerminalServices-LocalSessionManager/Operational'
        ID = 21, 23, 24, 25
         StartTime = (get-date).adddays(-7)
        }

    $AllEntries = Get-WinEvent -FilterHashtable $LogFilter -ComputerName $Server

    $AllEntries | Foreach { 
        $entry = [xml]$_.ToXml()
        [array]$Output += New-Object PSObject -Property @{
            TimeCreated = $_.TimeCreated
            User = $entry.Event.UserData.EventXML.User
            IPAddress = $entry.Event.UserData.EventXML.Address
            EventID = $entry.Event.System.EventID
            ServerName = $Server
            }        
        } 

}

$FilteredOutput += $Output | Select TimeCreated, User, ServerName, IPAddress, @{Name='Action';Expression={
            if ($_.EventID -eq '21'){"logon"}
            if ($_.EventID -eq '22'){"Shell start"}
            if ($_.EventID -eq '23'){"logoff"}
            if ($_.EventID -eq '24'){"disconnected"}
            if ($_.EventID -eq '25'){"reconnection"}
            }
        }

$Date = (Get-Date -Format s) -replace ":", "."
$FilePath = "$env:USERPROFILE\Desktop\$Date`_RDP_Report.csv"
$FilteredOutput | Sort TimeCreated | Export-Csv $FilePath -NoTypeInformation

写入主机“写入文件:$ FilePath” -ForegroundColor青色 写主机“完成!” -ForegroundColor青色

1 个答案:

答案 0 :(得分:1)

所以,你说……

  

(我真的不知道powershell,所以需要一些帮助。)

...,但指向您要使用的非常高级的PowerShell脚本。

至关重要的是,请勿使用任何人的代码,否则您将无法完全理解任何人的代码在做什么。您可能会严重损坏/损害您的系统或整个企业。请加强保护自己和您的企业,避免不必要的混乱,复杂性,问题,错误和挫败感:

Follow this link

关于您的查询...

  

但是我想使其仅针对1个用户,而不是所有用户。

…尽管脚本返回了所有用户,但是您只需要过滤/提示您所寻找的一个用户,而无需更改作者代码。

通过在该参数块中添加其他参数来提示用户

[string]$targetUser = (Read-Host -Prompt 'Enter a username')

在该$ FilteredOutput部分中,您将在其中或…中使用Where-Object cmdlet或匹配的字符串来使用其他$ targetUser参数。

$FilteredOutput | Sort TimeCreated | Export-Csv $FilePath -NoTypeInformation

…部分。像...

($FilteredOutput -match $TargetUser) | Sort TimeCreated | Export-Csv $FilePath -NoTypeInformation

我没有测试的环境,因此,我将把它留给您。

$ FilteredOutput |创建时间排序| Export-Csv $ FilePath -NoTypeInformation 这是所有基本的PowerShell“使用参数”用例,在所有入门的PowerShell课程,书籍,网站和内置的PowerShell帮助文件中都有介绍。