无法访问powershell中foreach循环部分的数组中的值

时间:2016-01-22 23:43:15

标签: arrays powershell

我对PowerShell和编码相对较新,并且在访问数组中的值时遇到问题。我试图使用foreach循环一组文件并计算每个文件中的消息数。然后将每个文件的计数放入数组中,以便将其分配给变量。当我写主机$ data [0]时,它返回所有值。如果我写主机$ data 1,它什么都不返回。似乎这些值都存储为一个而不是单个数字。如何获取每个值,然后将其分配给变量。任何帮助将不胜感激。

$FilePath = 'some file path here'
$TodaysDate = (Get-Date -format "MM-dd-yyyy")

ForEach($file in Get-ChildItem $FilePath -exclude *.ps1,*.xml,*.xls | Where-Object {$_.LastWriteTime -ge $TodaysDate})
{
    $data = ,@(Get-Content $file | Where-Object {$_.Contains("MSH|")}).Count
    write-host $data[0]
 }
exit

powershell result

1 个答案:

答案 0 :(得分:0)

在这一行:

$data = ,@(Get-Content $file | Where-Object {$_.Contains("MSH|")}).Count

您正在创建单个元素的数组(计数)。你想要做的是每次添加$ data:

$data += ,@(Get-Content $file | Where-Object {$_.Contains("MSH|")}).Count

但是根据你的描述,我认为你可能需要一个哈希表,使用文件名作为键:

$data = @{} #init hashtable
ForEach($file in Get-ChildItem $FilePath -exclude *.ps1,*.xml,*.xls | Where-Object {$_.LastWriteTime -ge $TodaysDate})
{
    $data[$file] = @(Get-Content $file | Where-Object {$_.Contains("MSH|")}).Count
}

write-output $data
相关问题