无法在Powershell中获取CSV行计数

无法在Powershell中获取CSV行计数,powershell,csv,count,Powershell,Csv,Count,我有一个csv文件,其结构如下: Text,Url Learning Haskell,https://wiki.haskell.org/Learning_Haskell 我试图在循环csv文件之前获取行数,因为我不想在空结果上开始循环 通过研究(,),似乎Import csv具有.Count属性,但由于某些原因,我无法访问该属性。我正在使用Powershell v5 代码: [string]$markdownlink = "markdownlinks.csv" [string]$process

我有一个csv文件,其结构如下:

Text,Url
Learning Haskell,https://wiki.haskell.org/Learning_Haskell
我试图在循环csv文件之前获取行数,因为我不想在空结果上开始循环

通过研究(,),似乎
Import csv
具有
.Count
属性,但由于某些原因,我无法访问该属性。我正在使用Powershell v5

代码:

[string]$markdownlink = "markdownlinks.csv"
[string]$processedLinks = "completedlinks.txt"

$markdownlinkstoProcess = Import-Csv $markdownlink -Delimiter "," 

# Returns 0
[int]$count=$markdownlinkstoProcess.Count
Write-output $count

当CSV文件中有一个数据行时,导入将生成单个对象有一个已知的错误,它将报告零作为$Var的
.Count
这似乎发生在任何返回单个PSCustomObject的对象上,但我不确定这一点

解决方案是强制它成为一个数组。您可以将其转换为
[array]
或简单地将其包装在
@()
中。以您的代码为例

$markdownlinkstoProcess = Import-Csv $markdownlink -Delimiter ","
$markdownlinkstoProcess.GetType()
# result = PSCustomObject
$markdownlinkstoProcess.Count
# result = 0

$markdownlinkstoProcess = @(Import-Csv $markdownlink -Delimiter ",")
$markdownlinkstoProcess.GetType()
# result = Object[]
$markdownlinkstoProcess.Count
# result = 1

您可以执行
$markdownlinkstoProcess.GetLength(0)
@($markdownlinkstoProcess.GetEnumerator()).Count
以获取csv中的行数
$markdownlinkstoProcess.GetUpperBound(0)+1
也可以实现这一功能。