Com pequenas alterações, envolver o loop em outro loop for deve fazer o truque - por exemplo:
for ($i = 0; $i -lt $folderItems.Count; $i += 5) {
$items = $folderItems[$i..($i+4)]
foreach ($item in $items) {
Write-Verbose "Modifying [$($item.FullName)]"
# Modify LastWriteTime here
}
Write-Host "Modified [$($items.Count)] files. " -NoNewline
Read-Host -Prompt 'Please press any key to continue...'
}
Isso define $i
para zero, faz um loop enquanto $i
é menor que a quantidade de itens em $folderItems
(a Contagem) e incrementa $i
em 5 cada loop.
Em seguida, ele obtém itens em $folderItems
com um índice de $i
a $i+4
e os processa.
Em seguida, ele grava algum texto e usa Read-Host
para aguardar a entrada do usuário antes de continuar.
No entanto, você deve saber que o seu loop original não modifica o LastWriteTime do arquivo - em vez disso, modifica a propriedade do PSObject que você armazenou em $folderItems
.
Você provavelmente deve usar Set-ItemProperty
ou ler o comentário feito por romeo-ninov sobre emulação de touch
.
Exemplo:
Set-ItemProperty -Path $itemPath -Name LastWriteTime -Value $currentTime
Você pode até mesmo substituir o foreach ($item in $items) {...}
simplesmente por canalizar $items
em Set-ItemProperty
!
Exemplo:
$items = $folderItems[$i..($i+4)]
$items | Set-ItemProperty -Name LastWriteTime -Value $currentTime