使用powershell循环播放csv

问题描述:

我试图使用powershell循环播放csv文件,但由于某种原因,我的foreach循环无法执行。我在网上查找无法找到为什么会这样。奇怪的是,如果我使用简单的循环,我可以迭代,但即时通讯只是想知道什么是未来的参考问题。我的代码如下使用powershell循环播放csv

Clear-Host 

$path = Split-Path -Path $MyInvocation.MyCommand.Path -Parent 
$csv = Import-Csv $path\Book1.csv -Delimiter ";" 

Write-Host $csv 
Write-Host @($csv).Length 

#When debugging the foreach doesnt get executed 
ForEach($l in $csv){ 
    Write-Host $l.ProjectManager 
} 

#This works fine 
for($i = 0; $i -lt @($csv).Length; $i++){ 
    Write-Host $csv.Item($i).ProjectManager 
} 

继承人的CSV文件

ProjectName;ProjectOwner;ProjectManager;ProjectNumber 
Test1;Rich Banks;Monica Ruden;1234567891 
Test2;Steve Jones;Steve Gibb;1234567892 
+0

我无法重现它。两个循环都适用于我。这是你正在运行的实际代码吗? – EBGreen

+0

你可以发布你的csv内容是什么样子吗?另外,我会尝试用逗号替换分号。理论上,任何分隔符都可以工作,但是当排除这样的奇怪问题时,最好回到“基础”。 – McKenning

+0

你的csv中有一个“ProjectManager”列吗? – toshi

似乎ISE跳过for循环

收回线阵列中的我会用 获取内容

那么你的循环会工作。

$ arrayWithAllLines =获取内容$ PSScriptRoot \ Book1.csv

+0

这个答案是非常违背powershell的精神。将CSV行视为字符串远不如将对象视为对象那样灵活。 – EBGreen

+0

你是对的EBGreen,我同意。 – toshi

没有什么不对的代码。它在Windows 2012 R2(PowerShell v3.0)上按预期运行。

输出如下:

@{ProjectName=Test1; ProjectOwner=Rich Banks; ProjectManager=Monica Ruden; ProjectNumber=1234567891} @{ProjectName=Test2 
; ProjectOwner=Steve Jones; ProjectManager=Steve Gibb; ProjectNumber=1234567892} 
2 
Monica Ruden 
Steve Gibb 
Monica Ruden 
Steve Gibb 

我想看看环境因素。你使用什么OS/PS版本?你在其他平台上试过了吗?

+0

这也不是一个答案。 – EBGreen