Select-Object选择多个对象但分割结果并修剪它们导出为CSV

时间:2017-03-08 14:08:31

标签: powershell export-to-csv

我有一个从计算机列表中读取的脚本,进行测试连接。如果它从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
}

1 个答案:

答案 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