Powershell .CSV 值通过管道传输到 select-objects returns 空记录?

Powershell .CSV values piped to select-objects returns empty records?

当我使用 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 table.

的 INSERT 语句之前截断
$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)')" 
}

我该怎么做才能扭转这种局面?

您使用的是竖线分隔的 CSV,而默认值为逗号。您在屏幕 #1 中看到数据,因为它为每一列创建了一个 object。你看到 headers 是空的,因为 powershell 不匹配那些文字 headers 下的任何 objects(因为只有一个 header,命名为所有的组合。 )

请注意,Select 可以 return header 当几乎没有匹配时:

'' | 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

If you specify a character other than the actual string delimiter in the file, Import-Csv cannot create objects from the CSV strings. Instead, it returns the strings.