我找到了一个脚本,该脚本记录了RDS服务器的所有用户,效果很好;
但是我想使其仅针对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青色
答案 0 :(得分:1)
所以,你说……
(我真的不知道powershell,所以需要一些帮助。)
...,但指向您要使用的非常高级的PowerShell脚本。
至关重要的是,请勿使用任何人的代码,否则您将无法完全理解任何人的代码在做什么。您可能会严重损坏/损害您的系统或整个企业。请加强保护自己和您的企业,避免不必要的混乱,复杂性,问题,错误和挫败感:
关于您的查询...
但是我想使其仅针对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帮助文件中都有介绍。