#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] не работает…