【问题标题】:Powershell .CSV values piped to select-objects returns empty records?输送到选择对象的 Powershell .CSV 值返回空记录?
【发布时间】:2018-09-21 18:08:21
【问题描述】:

当我使用 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)')" 
}

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

【问题讨论】:

  • 请将 CSV 文件中的一些示例行(包括标题行)添加到问题中。
  • CSV 数据是什么样的?
  • 我更新了我的问题并提供了视觉示例。
  • 你为Import-Csv指定了什么分隔符?

标签: powershell csv pipe import-csv select-object


【解决方案1】:

当默认值为逗号时,您使用的是管道分隔的 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 字符串创建对象。相反,它返回字符串。

【讨论】:

  • 工作完美哇,我从来没有想过这么简单的事情。因为它直到我使用 SQL truncate 语句才开始给我这个问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多