It does not skip one second. Your loop takes a little bit more than a second. And when the loop iteration starts “at the end” of a second it will need until “the start” of the second after the next second. … so from 103,9898191 to 105,0034982.
What is actually your issue? Do you try to solve a particular problem?
PowerShell and Windows in general are not supposed to be used for precise time measurements. Windows is not a real time OS. And you may consider that it takes time to run code - even if it’s just a small amount.
Doing a Start-Sleep -Milliseconds 1000 will probably take almost exactly 1 second. But doing a Write-Host as the next command in your loop will already take some more milliseconds. So if you run this a thousand times of course it will be more than 1000 seconds. Is that really so suprising for you? You may run a loop with only a Start-Sleep in it and then a loop togehter with a Write-Host in it and compare them.
Complete agreement with Olaf. I would also point out that every line of code takes a small slice of time to execute so after you have slept for 1 second you have 4 other lines of code that need to execute before you see the next increase. Those take time and honestly outputting to a screen is slow in comparison to how fast a computer operates.