0

此 powershell 代码搜索目录并输出所有文件的列表以及它们的年龄到被解析的日志文件购买不同的脚本。所有这些都正常工作,但我还需要跟踪它为该目录找到的文件数量以及在全球范围内找到的文件数量。这就是两个 foreach-Object 语句的作用。但他们停留在0。

 gci -filter *.avi | Select-Object Name, @{Name="Age"; Expression= { (((Get-Date) - $_.CreationTime).Days) }} | Where {$_.Age -ge $daysToKeep} | Out-File -filepath $logFile -append | Foreach-Object {$fileCountCam1++} | Foreach-Object {$fileCount++}
4

2 回答 2

1

mjolinor 的解决方案是有效的,但还有另一种方法(如果您可以使用 v3)。您可以使用Tee-Object无循环写入文件。

您还可以在 final 中将两个变量增量组合到同一个脚本块中,foreach-object这将显着加快速度。

gci -filter *.avi |
    Select-Object Name, @{Name="Age"; Expression= { (((Get-Date) - $_.CreationTime).Days) }} |
    Where {$_.Age -ge $daysToKeep} | Tee-Object -filepath $logFile -append |
    Foreach-Object {$fileCountCam1++;$fileCount++}
于 2013-10-20T11:15:36.840 回答
0

Out-File 是一个终止 cmdlet(它不会将对象输出到管道),因此它之后的所有内容都没有从管道获得任何输入。

看看这是否效果更好:

gci -filter *.avi |
Select-Object Name,  @{Name="Age"; Expression= { (((Get-Date) - $_.CreationTime).Days) }} |
 Where {$_.Age -ge $daysToKeep} | 
 Foreach-Object {
                 $_ | Out-File -filepath $logFile -append
                 $fileCountCam1++ 
                 $fileCount++
                }
于 2013-10-19T15:29:00.447 回答