2016-01-22 22 views
0

我对PowerShell和编码比较陌生,并且在访问数组中的值时遇到问题。我试图使用foreach循环一组文件并计算每个文件中的消息数量。然后将每个文件的计数存入一个数组,以便将其分配给一个变量。当我做写主机$ data [0]时,它会返回所有的值。如果我做写主机$ data 1它不会返回任何内容。看起来这些值都是作为一个存储的,而不是个别的数字。我如何获取每个值然后将其分配给一个变量。任何帮助,将不胜感激。无法访问属于PowerShell中foreach循环的数组中的值

$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

回答

0

在这一行:

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

要创建的单个元件(计数)的阵列。你想要做的是,在每次添加到$数据:

$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 
+0

好,谢谢,我不太了解哈希表,但读一点点。似乎这将工作。但是,现在我该如何从表中抽取每个文件的计数。文件名包括今天的日期,因此每天都会改变,所以我不能通过像$ data这样的键来获取值。“filename”。我试过这个,不知道这是否是正确的方法: $ Count = $ data.GetEnumerator()| ? {$ _。key -like“file_name *”} write-output $ Count这是给我的文件名和计数。我只是想将计数分配给变量。 – JM246

+0

我想我想通了。我只需要将.value添加到我的变量中:'$ Count = $ data.GetEnumerator()| ? {$ _。key -like“filename *”} write-output $ Count.value' – JM246

相关问题