That's because you are calling Get-ChildItem
in a foreach loop. And for each run you're placing it into a file based upon the machine/disk name for that iteration. If you want to put that into a single file then you need to use a single filename. Of course you could always merge the files later but I assume you want to skip that step.
It is unclear to me whether you want a single file for each server or a single file overall. I'm going to assume a single file per server otherwise you have no easy way to know what server a set of files came from.
Get-ChildItem ... | Out-File "C:\scripts\output\$Machine.txt -Append
This runs each command but stores it into a single file based upon the matchine name. The append option has the output appended to the existing file so each time through the loop it just keeps adding the content. Of course if the file exists before the run then it'll append anyway. You likely don't want that so either ensure the file doesn't exist before you start running your foreach loop or add a datetime to the filename before you run it.