Как я могу использовать подстановочные знаки с IF-содержащими в массиве? - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю над сценарием резервного копирования схемы базы данных в систему контроля версий.Я только что понял, что реплицируемые объекты также пишутся в сценарии;эти объекты начинаются с sp_MSupd_, sp_MSdel_, sp_MSins_ и syncobj_0x.Я хотел бы пропустить эти пункты.

Я знаю, что могу сделать что-то вроде этого:

$ExcludeObjectNames = @("sp_MSupd_", "sp_MSdel_","sp_MSins_","syncobj_0x")
If ($ExcludeObjectNames -contains "sp_MSdel_SampleObject")
{
    Write-Host "replicated item found"
}

Но это работает только для точных совпадений.Я попытался добавить * к элементам в массиве, но это не сработало.И я знаю, что могу использовать -подобно, но это, кажется, только для отдельных значений, а не массивов.

Я знаю, что могу сделать это

$ObjectNames = "sp_MSdel_SampleObject"
If ($ObjectNames -like "sp_MSupd_*" -OR $ObjectNames -like "sp_MSdel_*" -OR $ObjectNames -like "sp_MSins_*" -OR $ObjectNames -like "syncobj_0x*")
{
    Write-Host "replicated item found"
}

Это хорошо, НОесли я нахожу все больше и больше вещей, которые можно пропустить, это становится все более и более безобразным.

Есть ли способ использовать подстановочные знаки с -contains в массиве?

1 Ответ

0 голосов
/ 12 февраля 2019
$ExcludeObjectNames = @("sp_MSupd_", "sp_MSdel_","sp_MSins_","syncobj_0x")

Foreach ($ExcludeObjectName in $ExcludeObjectNames) {
  If ("sp_MSdel_SampleObject" -match $ExcludeObjectName)
  {
      Write-Host "replicated item found"
  }
}

Или, если вы хотите редактировать только переменные в скрипте, вы можете сделать:

$ExcludeObjectNames = @("sp_MSupd_", "sp_MSdel_","sp_MSins_","syncobj_0x")
$ObjectToCheck = "sp_MSdel_SampleObject" # This variable contains your original contains target

Foreach ($ExcludeObjectName in $ExcludeObjectNames) {
  If ($ObjectToCheck -match $ExcludeObjectName)
  {
      Write-Host "replicated item found"
  }
}

Если вам не нравится циклическое выполнение, вы можете просто создать фильтр регулярных выражений из исходного массива:

$ExcludeObjectNames = @("sp_MSupd_", "sp_MSdel_","sp_MSins_","syncobj_0x")
$ObjectToCheck = "sp_MSdel_SampleObject" # This variable contains your original contains target
$excludeFilter = '(^' + ($excludeobjectnames -join "|^") + ')' # Regex filter that you never have to manually update

If ($ObjectToCheck -match $ExcludeFilter)
{
    Write-Host "replicated item found"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...