test out the following code. For me, it misses out services that were installed by non system users. specifically the services im looking to list, which are those run by a service account, not a local or system account.
You're missing -ComputerName $s in your call to Get-WmiObject. Right now all it is doing is enumerating the Win32_Service objects on your local computer, once for each of the strings in the $servers parameter.
Don't worry though, it's an easy mistake to make. I've seen Don make the same mistake in one of his training videos. Also you have exposed your stea re-purposing of code because you forgot to change #end function Get-Uptime.
For best practice i believe the parameter servers should be called computername to align with other cmdlets.