Почему я не могу получить результат как «истинный» в приведенном ниже коде?

#powershell

Вопрос:

 $my_courses = @("course1 # Learning Task Automations # New", "course2 # Advanced Scripting amp; tool making # New2", "course3 # AD Management using PowerShell /In progress # New3")

$my_courses.Contains("Task")
 

Ответ №1:

Ваш $my_courses массив состоит из строк, поэтому вам не следует использовать метод string .Contains для него в целом. Вы можете использовать это для каждого элемента массива отдельно, но затем помните .Contains , что работает с учетом регистра, что, вероятно, не то, что вы хотите:

Если вы хотите проверить, содержит ли один из этих курсов подстроку «задача», и просто вернуть » или $true «или $false «, я предлагаю одно из следующих действий:

 $my_courses = "course1 # Learning Task Automations # New", 
              "course2 # Advanced Scripting amp; tool making # New2", 
              "course3 # AD Management using PowerShell /In progress # New3"
 
  1. используйте -like с подстановочными знаками и приведите результат к логическому значению. Если ни один элемент не содержит «задачу», результат будет $false
 [bool]($my_courses -like "*task*")
 
  1. используйте -match и приведите результат к логическому
 [bool]($my_courses -match "task")
 

Если вы хотите, чтобы задание word было целым словом, заключите его b метасимволами границ слов.
Это предотвратит получение True для таких слов, как «Целевая группа».

 [bool]($my_courses -match "btaskb")
 
  1. используйте Where-Object предложение для фильтрации массива элементов, содержащих «задачу», а затем снова приведите его к логическому
 [bool]($my_courses | Where-Object { $_ -match 'task' })
 
  1. использовать [regex]::IsMatch()
 # (?i) makes it case-insensitive and the b around it make it a whole word search
[regex]::IsMatch($my_courses, '(?i)btaskb')  
 

Ответ №2:

.contains Метод ищет точное совпадение, например

 $my_courses.contains("course1 # Learning Task Automations # New")
 

Метод не поддерживает подстановочные знаки — попробуйте использовать -like

 $my_courses -like "*Task*"