无法将Powershell输出写入csv文件
我是一个PowerShell新手,尝试编写一个简单的脚本来查找特定用户登录工作站的次数,并以一种有用的方式将该信息导出到CSV文件中,以便轻松操作。CSV文件实际上只需要包含登录时间和安全日志条目“消息”部分中提到的用户名 我的问题是,我似乎可以得到一个带有截断的“消息”的CSV文件,其中不包含用户名,或者我可以得到我想要打印到主机上的所有信息,而不是导出到CSV。我相信解决方案可能非常基本,但就像我说的,我是个新手 在这里发布的代码中,我得到了需要打印到主机上的所有内容,但我似乎无法将其放入CSV文件中。任何帮助都将不胜感激无法将Powershell输出写入csv文件,powershell,Powershell,我是一个PowerShell新手,尝试编写一个简单的脚本来查找特定用户登录工作站的次数,并以一种有用的方式将该信息导出到CSV文件中,以便轻松操作。CSV文件实际上只需要包含登录时间和安全日志条目“消息”部分中提到的用户名 我的问题是,我似乎可以得到一个带有截断的“消息”的CSV文件,其中不包含用户名,或者我可以得到我想要打印到主机上的所有信息,而不是导出到CSV。我相信解决方案可能非常基本,但就像我说的,我是个新手 在这里发布的代码中,我得到了需要打印到主机上的所有内容,但我似乎无法将其放入C
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
尝试将结果填充到一个数组中,如以下未经测试的代码
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}
$ReportOutPut = @() # An array to hold your output.
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])"
$ReportOutput += [pscustomobject] @{
Time = $timeLog;
Subject = $subject[2];
NewLogin = $NewLogin[2];
WorkstationName = $WorkstationName[1];
SourceNetworkAddress = $SourceNetworkAddress[1]
} # Custom objec to be exported via csv
}
Export-Csv -InputObject $ReportOutPut -NoTypeInformation -Path C:\UserLoginHistory\LoginHistory.csv
- 不要将{scrript block}中foreach的变量$item用于其他目的
- 创建一个[PSCustomObject],并将其发送到整个foreach的聚集变量
New-Item -Name "UserLoginHistory" -Path C:\ -ItemType Directory -Force | Out-Null
$UserName = Read-Host -Prompt 'Which user are you searching for?'
$Events = Get-EventLog -LogName Security -Message "*$UserName*" | Where-Object {$_.EventID -eq 4624}
$Data = foreach($Event in $Events){
$item = $Event.Message.Split(":")
[PSCustomObject]@{
Time = $Event.TimeGenerated
Subject = $item[3].split()[2]
NewLogin = $item[14].split()[2]
WorkstationName = $item[26].split()[1]
SourceNetworkAddress = $item[27].split()[1]
}
}
$Data | Format-Table -Autosize *
$Data | Out-Gridview
$Data | Export-Csv -Path C:\UserLoginHistory\LoginHistory.csv -NoTypeInformation
首先,您没有向
导出CSV
cmdlet发送任何内容。[grin]////其次,您没有创建要发送到上述cmdlet的对象。///第三,您的代码在我的win7、ps5.1系统上生成了大量关于$WorkstationName
&$SourceNetworkAddress
行的红色错误文本。//第四,$Subject
和$NewLogin
行生成的是-
和0x0
,而不是您想要的该代码在您的系统上实际工作吗?不要在{scrript block}
中重用foreach的变量$item
,用于其他目的。奇怪的是,我的机器上没有任何错误。这是域名加入Win 10 1809 Pro Plus。修复了一个带有可变名称的打字错误。我感谢您的回复!这最终会得到一个几乎空白的CSV,但我可以稍微处理一下,看看是否可以让它导出正确的信息。非常感谢。哇,效果很好。在混合中也有Out Gridview,让技术人员立即看到他们需要的信息!非常感谢。