You passed two hostnames as array. Two options...
Edit the function with loop to process each computernames, e.g. Foreach, or use pipeline.
#Option one: using loop
function Get-ComputerInfo
{
param ($computername)
foreach ($cn in $computername) {
$bios = Get-WmiObject -ComputerName $cn -Class Win32_Bios
$OperatingSystem = Get-WmiObject -ComputerName $cn -Class Win32_OperatingSystem
$ComputerSystem = Get-WmiObject -ComputerName $cn -Class Win32_ComputerSystem
$CustomObject = New-Object -TypeName psobject
$CustomObject | Add-Member -MemberType NoteProperty -Name 'Computer Name' -Value $cn
$CustomObject | Add-Member -MemberType NoteProperty -Name 'Serial Number' -Value $bios.SerialNumber
$CustomObject | Add-Member -MemberType NoteProperty -Name 'Host Name' -Value $ComputerSystem.DNSHostName
$CustomObject | Add-Member -MemberType NoteProperty -Name 'Domain' -Value $ComputerSystem.Domain
Write-Output $CustomObject
}
}
Get-ComputerInfo -computername 'Server1', $env:COMPUTERNAME | Format-Table -AutoSize -Wrap
#Option two: using pipeline
#the computername must pass from pipeline
function Get-ComputerInfo
{
param ([Parameter(ValueFromPipeline=$true)]$computername)
$bios = Get-WmiObject -ComputerName $computername -Class Win32_Bios
$OperatingSystem = Get-WmiObject -ComputerName $computername -Class Win32_OperatingSystem
$ComputerSystem = Get-WmiObject -ComputerName $computername -Class Win32_ComputerSystem
$CustomObject = New-Object -TypeName psobject
$CustomObject | Add-Member -MemberType NoteProperty -Name 'Computer Name' -Value $computername
$CustomObject | Add-Member -MemberType NoteProperty -Name 'Serial Number' -Value $bios.SerialNumber
$CustomObject | Add-Member -MemberType NoteProperty -Name 'Host Name' -Value $ComputerSystem.DNSHostName
$CustomObject | Add-Member -MemberType NoteProperty -Name 'Domain' -Value $ComputerSystem.Domain
Write-Output $CustomObject
}
#pass the computername from pipeline
'Server1', 'localhost' | Get-ComputerInfo | Format-Table -AutoSize -Wrap