Ошибка синтаксического анализа каждого массива PowerShell

#arrays #powershell #foreach #split

#массивы #powershell #для каждого #разделение

Вопрос:

Я пишу простой скрипт для анализа пары массивов (один вложен в другой), а затем выполняю проверку порта пера для каждого порта и типа порта.

 $ComputerList = 'dc-01'
$PortArray ='3389 TCP','389 TCP','53 UDP'

foreach ($Computer in $ComputerList)
{
    foreach ($Port in $PortArray)
    {
        write-host $Port

        $PortPair = $port.split()
        if ($portpair[1] -eq 'TCP')
        {
            write-host $portpair[1]
        }
        elseif($portpair[1] -eq 'UDP')
        {
            write-host $portpair[1]
        }
        else
        {
            write-host "Invalid protocol!"
        }          
    }
}

  

На моем домашнем КОМПЬЮТЕРЕ он отлично анализирует $ PortArray, а затем разделяет части 3389 и TCP отдельно на элемент 0 и элемент 1 . Но когда я запускаю один и тот же простой код на своем рабочем компьютере, он анализирует каждый символ каждого элемента массива по одному, поэтому проверка If не выполняется, и я продолжаю запускать проверку Else.

Комментарии:

1. Измените $port.Split() на $port.Split(" ")

2. Переменные Powershell не чувствительны к регистру, но лучше не смешивать, как вы делаете с $PortPair, $portpair.

3. Спасибо Матиасу. Я попробую это. Я думаю, что с помощью метода разделения, если вы не укажете никаких параметров, он разделяется на пробелы? Палле — согласен, но это был просто быстрый и грязный скрипт 🙂

4. Хорошо, я только что изменил его на предложение Матиаса, и, похоже, это не имеет значения. Если я изменю $PortArray на ‘1234 TCP’, ‘567 TCP’, ’89 UDP’, он вернет только первые два символа каждого значения (например, 1,2, 5,6 и 8,9)

5. В конце концов я заставил его работать, используя $ portNum,$ PortProtocol = $port.split() . Не уверен, почему ссылка на стиль элемента $ portpair [0] не работает…