Отправка сложной многострочной команды через plink на маршрутизатор Cisco = необъяснимое поведение

Я пытаюсь сделать приведенную ниже часть кода относительно сжатой (чтобы подключить к гораздо большему сценарию). У меня нет проблем с отправкой нескольких команд таким способом. Однако, есть кое-что, что заставляет многострочную команду в конечном счете подавиться. Синтаксис для команд Cisco представляется правильным. Я не уверен, сталкиваюсь ли я с каким-то лимитом символов или мне нужно экранировать определенные символы в $showintstatusCommands, но ничего, что я пробовал, похоже, не работает.

Этот код:

$BGPInterface = "GigabitEthernet0/2"
$showintstatusCommands =  "`nterminal length 0`nsho int $BGPInterface | include reliability|errors`nsho log | include $Date.*LINK-3-UPDOWN.*$BGPInterface`nexit"
($Response = $showintstatusCommands | C:\Windows\plink.exe -ssh -2 -l $Credential.GetNetworkCredential().username -pw $($Credential.GetNetworkCredential().password) $DeviceName -batch) 2>$null | out-null

производит ниже, когда я раскрываю содержимое переменных. $ShowIntstatusCommands кажется правильным, когда оно отражается локально. Обратите внимание, что конец 3-й строки обрезан (в конце отсутствует символ числа 2). Также последующая строка - это какой-то странный остаток предыдущей строки, который начинается с $nclude,

PS C:\Users\MKANET\Desktop\test> $Response
CISCO-ROUTER#
CISCO-ROUTER#terminal length 0
CISCO-ROUTER#sho int GigabitEthernet0/2 | include reliability|errors

   reliability 255/255, txload 1/255, rxload 1/255

0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored

0 output errors, 0 collisions, 3 interface resets

CISCO-ROUTER#sho log | include Jul 17.*LINK-3-UPDOWN.*GigabitEthernet0/

$nclude Jul 17.*LINK-3-UPDOWN.*GigabitEthernet0/2

CISCO-ROUTER#
CISCO-ROUTER#exit
PS C:\Users\MKANET\Desktop\test> $showintstatusCommands
terminal length 0
sho int GigabitEthernet0/2 | include reliability|errors
sho log | include Jul 17.*LINK-3-UPDOWN.*GigabitEthernet0/2
exit

2 ответа

Наконец, я убедился, что на всех удаленных устройствах происходило одинаковое поведение, если набрать команду ниже вручную. Строка get перемешивается, если используется слишком много символов.

Я изменился:

sho log | include $Date.*LINK-3-UPDOWN.*$BGPInterface

к приведенной ниже команде (удаление только пары символов); и это работало нормально. Похоже, это был предел CLI Cisco IOS.

sho log | include $Date.*LINK-3-UPDO.*$BGPInterface

Когда вы записываете переменную в неглобальной области (например, в область действия скрипта или функции), PowerShell не будет изменять никакие переменные области более высокого уровня с тем же именем. IOW $Response = 'foo' создаст локальную копию переменной $Response и присвоит ей 'foo'. Если вы хотите изменить глобальную переменную $Response, измените строку на $global:Response = ... Что вы видите в $global:Response Остаток, вероятно, от предыдущих повозок.

Другие вопросы по тегам