Tod*_*lch 2 csv import powershell 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
Run Code Online (Sandbox Code Playgroud)
Powershell代码:
$computerscsv = import-csv -Path "C:\C Drives Less than 10GB free.csv" #import the csv file
$computerscsv | Format-Table
pause
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
编辑:在PowerShell GitHub存储库上已报告了此问题。
它似乎是命令中的错误。CSV文件中的标头不能以开头#。请注意,将第一个标头转换为"#",#也不能解决此问题。
解决方法:
$data = Get-Content "C:\C Drives Less than 10GB free.csv"
$data[0] = 'Num' + $data[0]
$data | ConvertFrom-Csv
Run Code Online (Sandbox Code Playgroud)
或者,对于更通用的解决方案:
$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
Run Code Online (Sandbox Code Playgroud)
我的猜测是,Import-Csv并且ConvertFrom-Csv将以a开头的第一行误认为#是(现在已经过时)类型信息行的开头:
PS C:\> Get-ChildItem C:\Windows\ | Select-Object Name, LastWriteTime -First 1 | ConvertTo-Csv -NoTypeInformation:$false
#TYPE Selected.System.IO.DirectoryInfo
"Name","LastWriteTime"
"addins","9/15/2018 3:33:54 AM"
Run Code Online (Sandbox Code Playgroud)