powershell - 登录时间脚本 | 如何覆盖上次登录Powershell
问题描述
我在我的 GPO 上配置了一个脚本,用于跟踪某个用户组的登录时间,这些用户组的登录时间已导出到 csv。
现在我得到了问题,让它只显示最后一次登录时间。
目前它只记录每个登录时间,但他们只想要最后一个。
有没有办法让它覆盖它?
假设 user1 登录了 3 次,我只想显示最后一个,以及该组中的每个用户。
我目前拥有的脚本是一个非常简单的脚本:
"logon {0} {1} {2:DD-MM-YYYY HH:mm:ss}" -f (Get-Date),$env:username, $env:computername >> \\server\folder\file.csv
如果有人能告诉我是否可能,将不胜感激!
解决方案
首先,您要在不是 CSV 文件的文本文件中附加一行,因为这些值不是由分隔符分隔的。然后,您还为 Format 运算符使用了错误的值顺序-f
:虽然模板字符串清楚地将日期作为 中的最后一个占位符{2:DD-MM-YYYY HH:mm:ss}
,但您将其作为第一个值提供。
另请注意,日期格式区分大小写,因此您需要更改DD-MM-YYYY HH:mm:ss
为dd-MM-yyyy HH:mm:ss
我建议将您现在必须的脚本更改为:
[PsCustomObject]@{
User = $env:USERNAME
Computer = $env:COMPUTERNAME
LogonDate = '{0:dd-MM-yyyy HH:mm:ss}' -f (Get-Date)
} | Export-Csv -Path '\\server\folder\UserLogon.csv' -NoTypeInformation -Append
然后,当归结为读取该文件并仅保留最新登录时,您可以这样做
$data = Import-Csv -Path '\\server\folder\UserLogon.csv' | Group-Object User | ForEach-Object {
$_.Group | Sort-Object {[datetime]::ParseExact($_.LogonDate, 'dd-MM-yyyy HH:mm:ss', $null)} |
Select-Object -Last 1
}
# output on screen
$data
# overwrite the CSV file to keep only the last logons
$data | Export-Csv -Path '\\server\folder\UserLogon.csv' -NoTypeInformation
推荐阅读
- swift - 如何快速裁剪图像
- python - sklearn 中的仅分类器管道
- javascript - 如何使用 gem 'jquery-validation-rails' 验证 AJAX 请求的表单
- python - 然后用输入替换列表中大于 100 的某些对象
- ios - 在 tableView 更新期间对数据源的线程安全访问
- mongodb - MongoDB:为嵌入式数组创建索引
- sql - 使一列自动,以便每次输入新记录时它可以增加一
- r - R 的控制流与多个 if 语句的行为不符
- linux-kernel - 如何在 beaglebone 自定义 linux 上自动连接 wifi
- promise - 使用 esri/request 触发的多个 XHR 请求在使用 dojo/promise/all 处理时返回延迟