为什么Powershell Import-Csv无法在此CSV文件上正常工作?

时间:2019-06-19 18:34:44

标签: powershell csv import import-csv

我正在将此CSV文件导入到powershell中,但是它没有导入标头和所有列。它仅获得第一列,但认为没有标题。我意识到第二行是空的,但这是软件如何使用需要处理的数据生成CSV文件的方式。

CSV文件:

#,Labels,Machine Name,System Description,IP,User Logged,Disk Free C
,,,,,,
6,"computers-PRO,Desktop,Office 2010,OS Windows 7,Update Adobe Reader",PRO-MEDASST,91-0-928,172.10.201.111,CHR\\jeniferc,6.3
7,Update Adobe Reader,RED,empty,172.10.201.5,,9.5
8,Update Adobe Reader,SIER,empty,172.10.201.5,,6.8

Powershell代码:

$computerscsv = import-csv -Path "C:\C Drives Less than 10GB free.csv" #import the csv file
$computerscsv | Format-Table
pause

Powershell输出:

WARNING: One or more headers were not specified. Default names starting with "H" have been used in place of any missing
 headers.

H1
--
6
7
8

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

编辑:此问题已在the PowerShell GitHub repository上报告。


这似乎是命令中的错误。 CSV文件中的标题不能以undefined开头。请注意,将第一个标头转换为#而不是"#"也不能解决问题。

解决方法:

#

或者,对于更通用的解决方案:

$data = Get-Content "C:\C Drives Less than 10GB free.csv"
$data[0] = 'Num' + $data[0]
$data | ConvertFrom-Csv

我的猜测是$data = Get-Content "C:\C Drives Less than 10GB free.csv" if ($data[0][0] -eq '#') { $data[0] = 'Num' + $data[0] } elseif ($data[0].Substring(0,2) -eq '"#') { $data[0] = '"Num' + $data[0].Substring(1) } $data | ConvertFrom-Csv Import-Csv将以ConvertFrom-Csv开头的第一行误认为是类型信息行(现在已经过时了)的开头:

#

答案 1 :(得分:3)

我不知道确切的原因,但看起来井号/哈希使Import-CSV忽略了第一行。本质上,您的文件使用那些逗号作为标题,这也是错误的。您可以通过删除文件的第一行来模拟这一点。您将得到相同的结果。符号本身不是问题,而是它是标题中的第一个字符的事实。

更改该字符足以使其正常工作。

$file = Get-Content "C:\C Drives Less than 10GB free.csv"
$file[0] = $file[0].Replace('#',"Num")
$file | ConvertFrom-Csv 

“数字”可能无法满足您的需求,但您需要将其设为其他。寻找是否有更好的方法,但是应该这样做。


(可选)通过管道传递到| Select-Object -Skip 1来处理该空行,或者更安全的方法是通过| Where-Object{$_.Num}清除没有#的条目,以防其中更多或不能保证第一行是空白的。