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