Если производительность имеет значение, избегайте использования командлетов и конвейера;use switch -File
:
$count = 0
switch -File C:\test.txt {
default { ++$count }
}
switch -File
перечисляет строки указанного файла;условие default
соответствует любой строке.
Чтобы понять разницу в производительности:
# Create a sample file with 100,000 lines.
1..1e5 > tmp.txt
# Warm up the file cache
foreach ($line in [IO.File]::ReadLines("$pwd/tmp.txt")) { }
(Measure-Command { (Get-Content tmp.txt | Measure-Object).Count }).TotalSeconds
(Measure-Command { $count = 0; switch -File tmp.txt { default { ++$count } } }).TotalSeconds
Пример результатов с моего компьютера с Windows 10 / PSv5.1:
1.3081307 # Get-Content + Measure-Object
0.1097513 # switch -File
То есть на моей машине команда switch -File
была примерно в 12 раз быстрее.