Прежде всего, если вам нужен набор значений в $ary_param
, сделайте что-то вроде "sql","ftp"
, а не "sql,ftp"
- в последнем случае это всего лишь одна строка. Когда вы присваиваете услуги и хотите использовать последние, вам, возможно, придется сделать следующее:
$services = $ary_param.split(",")
Это позволит убедиться, что $ services является массивом.
В where-object
то, что вы делаете, выглядит примерно так:
"sql server" -like "*" + $services + "*"
Выше приведено значение true, и это тот случай, когда $ary_param
имеет только один элемент.
Но что-то вроде $ services = "sql","ftp"
сделает приведенный выше возврат false.
Возможно, вы захотите направить службы и делать то, что вы хотите, в объекте foreach:
$services | %{
#logic goes here
#use $_ to represent each service type and use it in the Where-Object
}
Обратите внимание, что вам не нужно использовать Where-Object в Get-WmiObject, вы можете фильтровать напрямую:
Get-WmiObject -Class Win32_Service -Filter "Name LIKE '$_'" -ComputerName $host_name
Вам также придется принудительно выводить Get-WmiObject
в массив, чтобы избежать проблем с возвратом одного объекта или без него, как рекомендует @Keith Hill.