Не удается получить соответствие строки PowerShell для возврата True - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть массив строковых значений, и я пытаюсь запустить соответствующий цикл (используя оператор -eq) и возвращает true, если другая переменная соответствует одному из строковых значений в массиве. Хотя я знаю, что значения должны совпадать, цикл возвращает значение false.

В настоящее время я беру объекты PS и извлекаю строковые значения определенного свойства объекта для сопоставления. Я пробовал другие операторы, кроме -eq, включая -like с использованием подстановочного знака и -match, но в поведении изменений нет. Я также в настоящее время создаю список, используя $XXXX.Add($XXXX), но мне также не повезло, просто заполнив массив =+.

foreach ($Server in $UpdateGroupMembers) {
    if ($Server -eq $NodeName) {
        Write-Host "$Server is a match, loop terminated"
        return $true
        #break
    } else {
        Write-Host "There is no match"
        return $false
    }
}

$NodeName в приведенном выше коде есть значение, которое, как я знаю, существует в массиве / списке, поэтому я совершенно растерялся.

Ответы [ 2 ]

3 голосов
/ 30 апреля 2019

Если вам просто нужно проверить, содержит ли список или массив элемент, вы можете использовать оператор -in:

if ($NodeName -in $UpdateGroupMembers) {
    "$NodeName is a match"
    $true
}
else {
    "There is no match"
    $false
}

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

$NodeName -in $UpdateGroupMembers
1 голос
/ 30 апреля 2019

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

$found= $false
foreach ($Server in $UpdateGroupMembers) {
    if ($Server -eq $NodeName) {
        Write-Host "$Server is a match, loop terminated"
        $found = $true
        break
}
if ($found -eq $false) {write-host "no match found for $NodeName "}
return $found

Убедитесь, что $ NodeName является строкой, а $ UpdateGroupMembers является коллекцией имен, а неКоллекция объектов, чтобы вы могли сравнить их.Я использую что-то вроде $UpdateGroupMembers | get-member, чтобы точно понять, с чем я работаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...