我有一个从计算机列表中读取的脚本,进行测试连接。如果它从Test-Connection
得到答复,它会执行if / else并从Get-ChildItem
构建一个从可疑系统C:\Users
读取的变量,以查看最后一个登录的人员选择登录的最后一个用户的名称和上次写入时间,并执行Write-Host
结果。如果Test-Conneciton
没有得到答复,则会使用"离线"来构建系统名称的变量。声明并执行Write-Host
来显示它。然后,要完成所有操作,它会将结果导出为CSV。
我遇到的一些问题:
Get-ChildItem
的变量执行Select-Object Name, LastWriteTime
并将结果构建为变量。我想分别显示这些结果(当然,将它们导出到CSV中)而不是合并。以下是Test-Connection
从机器获得回复时Get-ChildItem的结果示例(当然系统名称,IP地址和用户名已更改以保护无辜者):
SYSTEMNAME @{IPV4Address=192.168.0.1} @{Name=John.Doe; LastWriteTime=03/08/2017 08:11:48}
名称和上次写入时间在结果中合并,我需要在显示和CSV导出中拆分它们以及修剪额外的字符。像这样的东西,系统名称,IP地址,名称和lastwritetime都会出现在CSV中自己的单元格中:
SYSTEMNAME 192.168.0.1 Name=John.Doe LastWriteTime=03/08/2017 08:11:48
以下代码:
$computerList = Get-Content "D:\filelocation\LastLogIn.txt"
foreach ($Computername in $computerList) {
$ipreachable = Test-Connection $computerName -EA SilentlyContinue -Count 1 |
select IPV4address
$output =@()
if ($ipreachable) {
$LastUserLoggedIn = Get-ChildItem "\\$computername\c$\Users" -EA SilentlyContinue |
Sort-Object LastWriteTime -Descending |
Select-Object Name, LastWriteTime -First 1
$Details = "$LastUserLoggedIn"
Write-Host $computername $ipreachable $Details
} else {
$details = "$computerName Computer does not exisit or is offline"
Write-Host $Details
}
[PSCustomObject]@{
SystemName = $Computername
IPV4Address = $ipreachable
UserLogInDetails = $details
} | Export-Csv "D:\filelocation\lastuserreults.csv" -NoType -Append
}
答案 0 :(得分:2)
展开IP地址:
... | Select-Object -Expand IPV4Address | Select-Object -Expand IPAddressToString
并且不要将目录信息转换为字符串:
$Details = "$LastUserLoggedIn"
像这样构建数据对象:
$obj = [PSCustomObject]@{
SystemName = $Computername
IPV4Address = $ipreachable
UserName = $LastUserLoggedIn.Name
Timestamp = $LastUserLoggedIn.LastWriteTime
}
这样您就可以在控制台上显示信息并将其导出为CSV:
$obj | Format-Table -AutoSize
$obj | Export-Csv 'C:\path\to\your.csv' -NoType -Append