【发布时间】:2019-05-08 21:19:37
【问题描述】:
我是一名 PowerShell 新手,试图编写一个简单的脚本来查找特定用户登录工作站的次数,并以一种有用的方式将该信息导出到 CSV 文件,以便轻松操作。 CSV 文件只需要包含登录时间和安全日志条目的“消息”部分中提到的用户名。
我的问题是,我似乎可以得到一个 CSV 文件,其中包含一个不包含用户名的截断“消息”,或者我得到了我想要打印到主机而不是导出到 CSV 的所有信息。我确信解决方案可能非常基本,但就像我说的我是新手。
在这里发布的代码中,我得到了我需要打印到主机的所有内容,但我似乎无法将其放入 CSV 文件中。任何帮助将不胜感激。
New-Item -Name "UserLoginHistory" -Path C:\ -ItemType Directory -Force | Out-Null
$UserName = Read-Host -Prompt 'Which user are you searching for?'
$a =Get-EventLog -LogName Security -Message "*$UserName*" | Where-Object {$_.EventID -eq 4624}
foreach($item in $a)
{
$timeLog = $item.TimeGenerated
$item = $item.Message.Split(":")
$subject = $item[3].split()
#$subject[2]
$NewLogin = $item[14].split()
#$NewLogin[2]
$WorkstationName = $item[26].split()
#$WorkstationName[1]
$SourceNetworkAddress = $item[27].split()
#$SourceNetworkAddress[1]
"Time: $timeLog Subject: $($subject[2]) NewLogin: $($NewLogin[2]) WorkstationName $($WorkstationName[1]) SourceNetworkAddress $($SourceNetworkAddress[1])"
}
Export-Csv -Path C:\UserLoginHistory\LoginHistory.csv
【问题讨论】:
-
首先,您不会向
Export-CSVcmdlet 发送任何内容。 [grin] ///// 其次,您没有创建要发送到上述 cmdlet 的对象。 ///// 第三,您的代码在我的 win7、ps5.1 系统上生成大量关于$WorkstationName和$SourceNetworkAddress行的红色错误文本。 ///// 第四,$Subject和$NewLogin行正在生成-和0x0而不是您想要的。 ///// 该代码是否真的在您的系统上工作? -
不要将
{scrript block}中foreach的变量$item用于其他目的。 -
这很奇怪,我的机器上没有任何错误。它的域加入了 Win 10 1809 Pro Plus。
标签: powershell