0

当我使用 import-csv 从 .csv 文件中检索数据时

在此处输入图像描述

我可以使用 Import-CSV 在控制台窗格中检索文件中的数据:

import-csv \\TestPath\licenses_v2.csv 

在此处输入图像描述

但是,当我将该输出通过管道传输到 select-object 语句时,会检索到相同数量的行,但它们现在都是空的。

import-csv \\TestPath\licenses_v2.csv | 
select-object FirstName,LastName,Department,Title

在此处输入图像描述

这发生在我开始测试以下两个单独的脚本之后,试图在 SQL 表的 INSERT 语句之前进行 TRUNCATE。

$database = 'DATABASE'
$server = 'SERVER'
$table = 'TABLE'
Import-CSV \\TESTPATH\licenses_v2.csv | 
ForEach-Object { Invoke-Sqlcmd -Database $database -ServerInstance $server -Query "truncate table $table; insert into $table VALUES ('$($_.FirstName)','$($_.LastName)','$($_.Department)','$($_.Title)')" 
}

$database = 'DATABASE'
$server = 'SERVER'
$table = 'TABLE'
Invoke-Sqlcmd -Database $database -ServerInstance $server -Query "truncate table $table"
Import-CSV \\TESTPATH\licenses_v2.csv | 
ForEach-Object { Invoke-Sqlcmd -Database $database -ServerInstance $server -Query "insert into $table VALUES ('$($_.FirstName)','$($_.LastName)','$($_.Department)','$($_.Title)')" 
}

我该怎么做才能扭转这种情况?

4

1 回答 1

4

当默认值为逗号时,您使用的是管道分隔的 CSV。您会在屏幕 #1 中看到数据,因为它为每一列创建了一个对象。您会看到标题为空,因为 powershell 不匹配这些文字标题下的任何对象(因为只有一个标题,命名为所有标题的组合。)

请注意,当与任何内容匹配时,Select 可以返回标头:

'' | Select Name,Date

Name Date
---- ----

要修复,只需使用Import-Csv -Delimiter '|'

请参阅https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/import-csv?view=powershell-6#optional-parameters

如果您在文件中指定的字符不是实际的字符串定界符,则 Import-Csv 无法从 CSV 字符串创建对象。相反,它返回字符串。

于 2018-04-11T20:52:06.550 回答