首页 > 解决方案 > 如何通过 Powershell 脚本隐藏/删除输出 csv 中的标头

问题描述

我正在使用 Psping 检查带有端口的 IP 延迟并导出结果 CSV 而不显示标题。

我试过 -select skip 1 它似乎不起作用但有错误。


function CheckLatency 
{
  param([string[]]$servers)
  foreach ($server in $servers) 
  {
    $times = [ordered]@{ Server = "$server";TimeStamp = (Get-Date -f "yyyy-MM-dd hh:mm:ss"); Minimum = 0; Maximum = 0; Average = 0; } 
    $results = & "c:\users\test\desktop\psping.exe" -n 1 $server 2>&1 | select-string "Minimum" 
    if ($results) {
      $results = $results.tostring() -split "," 
      foreach ($result in $results) 
      {
        $result = ($result -replace "ms","").trim() 
        $parsed = $result -split " "
        switch ($parsed[0]) 
        {
          "Minimum" {$times.Minimum = $parsed[2]}
          "Maximum" {$times.Maximum = $parsed[2]}
          "Average" {$times.Average = $parsed[2]}
        }
      }
      new-object -type PSObject -prop $times
    }
  }
}

$csvFile = "C:\users\test\desktop\check$(get-date -f yyyy-MM-dd-hhmmss).csv"
CheckLatency 8.8.8.8:443,8.8.8.8:80 | Export-CSV -LiteralPath $csvFile -NoTypeInformation

带标题的输出

请帮助删除标题

标签: powershellcsv

解决方案


Export-Csv 总是包含一个标题行(输出对象的属性名称列表)。

您唯一的选择是在事后使用纯文本处理删除该行:

$csvFile = "C:\users\test\desktop\check$(get-date -f yyyy-MM-dd-hhmmss).csv"

# ... your code that calls 
# Export-CSV -LiteralPath $csvFile -NoTypeInformation

# Read the resulting file as an array of lines, skip the 1st line,
# and write the result back to the file.
(Get-Content -LiteralPath $csvFile) | Select-Object -Skip 1 | Set-Content -LiteralPath $csvFile

注意调用(...)周围Get-Content,它确保文件在其行通过管道发送之前被完整读取,从而允许在同一管道中重写输入文件。
请注意,如果写入过程被中断,文件损坏的可能性很小。

请注意,Windows PowerShell 默认使用 ANSI 编码Set-Content,而Export-Csv使用 ASCII;-Encoding根据需要使用。幸运的是, PowerShell Core始终默认为无 BOM 的 UTF-8。


推荐阅读