Reading SQL Performance Counters using PowerShell script
Try this:

Get-Counter "$($instance):Buffer Manager\Buffer cache hit ratio"


What happens is that your $instance variable isn't isolated, so therefore you need to explicitly state what the variable is and where it ends.  You can do that with the above notation (dollar sign and parenthesis around the variable name).

Take a look at the different outputs of the following:

Write-Host "$instance:Buffer Manager\Buffer cache hit ratio"


The output is:

 Manager\Buffer cache hit ratio


Now with this correct notation:

Write-Host "$($instance):Buffer Manager\Buffer cache hit ratio"


The output is this:

\\MyMachineName\MSSQL$InstanceName:Buffer Manager\Buffer cache hit ratio


A common way to troubleshoot these sorts of problems is to use the above methodology, by seeing exactly what you're passing into other cmdlets/functions/etc.