You should use a scriptblock. It will expand the variables every time you call it. I got Hyper-V installed myself, so I made an example for you:
PS > $computer = "DC", "SQL"
$mywherestatement = { $_.Name -like $Computer[0] -or $_.Name -like $Computer[1] }
Get-VM | Where $mywherestatement
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status
---- ----- ----------- ----------------- ------ ------
DC Saved 0 0 00:00:00 Operating normally
SQL Saved 0 0 00:00:00 Operating normally
PS > $computer = "CLIENT", "WebDev"
Get-VM | Where $mywherestatement
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status
---- ----- ----------- ----------------- ------ ------
CLIENT Saved 0 0 00:00:00 Operating normally
WebDev Saved 0 0 00:00:00 Operating normally
If your $computer array only contains the names you want to check, I'd use -contains instead, because it will work with arrays of any size. Ex:
PS > $computer = "DC", "SQL", "CLIENT", "WebDev"
Get-VM | Where { $Computer -contains $_.Name }
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status
---- ----- ----------- ----------------- ------ ------
CLIENT Saved 0 0 00:00:00 Operating normally
DC Saved 0 0 00:00:00 Operating normally
SQL Saved 0 0 00:00:00 Operating normally
WebDev Saved 0 0 00:00:00 Operating normally