Отправка сложной многострочной команды через 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
Остаток, вероятно, от предыдущих повозок.