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

Select-Object selecting multiple objects but splitting the results and trimming them export to CSV

我有一个脚本可以从计算机列表中读取,并进行测试连接。如果它从 Test-Connection 得到回复,它会执行 if/else 并从 Get-ChildItem 构建一个变量,该变量从可疑系统 C:\Users 读取以查看最后一个记录的人in 和 select 最后登录用户的姓名和最后写入时间,并对结果进行 Write-Host。如果 Test-Conneciton 没有得到回复,它会使用 "offline" 语句构建系统名称的变量,并执行 Write-Host 来显示它。然后,为了完成这一切,它将结果导出到 CSV。

我遇到的几件事:

下面是 Test-Connection 收到机器回复时 Get-ChildItem 的结果示例(当然系统名称、IP 地址和用户名已更改以保护无辜者):

SYSTEMNAME @{IPV4Address=192.168.0.1} @{Name=John.Doe; LastWriteTime=03/08/2017 08:11:48}

名称和上次写入时间合并在结果中,我需要在显示和 CSV 导出以及 trim 额外字符中将它们分开。像这样,其中系统名称、IP 地址、名称和上次写入时间都将出现在 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
}

展开IP地址:

... | Select-Object -Expand IPV4Address | Select-Object -Expand IPAddressToString

并且不要将目录信息变成字符串:

<strike>$Details = "$LastUserLoggedIn"</strike>

像这样构建您的数据对象:

$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