Я уже несколько часов стуча головой о стену и ищу какую-то помощь. Чтобы упростить мой вопрос, у меня есть два массива, один из которых содержит символы, а другой, который использует эти символы:Powershell Используйте подстановочные знаки при сопоставлении массивов
$WildCardArray = @("RED-*.htm", "*.yellow", "BLUE!.txt", "*.green", "*.purple")
$SpelledOutArray = @("RED-123.htm", "456.yellow", "BLUE!.txt", "789.green", "purple.102", "orange.abc")
Я не могу получить PowerShell, чтобы признать, что эти встречи.
Моей конечной целью является вывод, который говорит мне, что purple.102 и orange.abc не находятся в $ WildCardArray.
Кажется супер простым! Некоторые из вещей, которые я пробовал:
$WildCardArray = @("RED-*.htm", "*.yellow", "BLUE!.txt", "*.green", "*.purple")
$SpelledOutArray = @("RED-123.htm", "456.yellow", "BLUE!.txt", "789.green", "purple.102", "orange.abc")
foreach($Item in $SpelledOutArray)
{
$item | where {$wildcardarray -contains $item}
}
я СИНИЙ .txt в результате, потому что это мой контроль, без масок!. Если я изменю это на -notcontains, я получаю все полученные результаты, кроме BLUE. Я пробовал содержать, сопоставлять, равно, как и все их противоположности, сравнивать-объект, и ничего не работает. Я не получаю ошибок, я просто не получаю ожидаемых результатов.
Я попытался заменить «*» на [a-zA-Z] и другие комбинации, но он заменяет его буквально, а не как подстановочный знак. Я не уверен, что я делаю неправильно .... PSVersion 5.1 Win 10
Кто-нибудь знает логику ПОЧЕМУ, как/match/contains не работает, и что я могу сделать, чтобы он работал? Он не должен быть очень, он просто должен работать
'-contains' ищет точное соответствие, и я уверен, что это угрозы' * 'как символ без какого-либо особого значения. – 4c74356b41
' $ WildCardArray | ForEach-Object {$ Wildcard = $ _; $ SpelledOutArray | Where-Object {$ _ -like $ WildCard}} ' – beatcracker
@beatcracker, который дает неверный результат. – TessellatingHeckler