This is the thing with Powershell: everything is objects since it’s an object oriented language. A string is an object. The original output from Get-WindowsDriver is a different type of object. Piping to Select-Object effectively converts the objects to PSObjects (see Select-Object documentation).
We could have piped Get-WindowsDriver to Where-Object, to Select-Object, to Sort-Object, to ConvertTo-Html to Out-File, but that is very hard to read and doesn’t give you a chance to play with any of the objects in between.
I used the $Drivers variable so that I could manually play around with it, explore its contents and object types, pipe it to other cmdlets etc and see how it behaved. I did not execute a .ps1 file once. Instead I had this code in VS Code and was selectively executing the lines, or using the built-in terminal to call the variables.