通过plink向Cisco Router发送复杂的多行命令=不明原因的行为

时间:2015-07-18 02:28:54

标签: powershell ssh plink cisco-ios

我试图以相对简洁的方式完成代码的下面部分(插入更大的脚本)。以这种方式发送多个命令我没有任何问题。然而,有一些因素导致多行命令最终窒息。 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 个答案:

答案 0 :(得分:0)

当您在非全局范围(如脚本或函数范围)中写入变量时,PowerShell不会修改同名的任何更高级别范围的变量。 IOW $Response = 'foo'将创建$ Response变量的本地副本,并为其指定'foo'。如果您的目的是修改全局变量$ Response,那么将该行更改为$global:Response = ...您在$global:Response中看到的内容是残差,可能来自之前的小修补补补。

答案 1 :(得分:0)

如果我手动输入以下命令,我终于验证了所有远程设备上都发生了同样的行为。如果使用了太多字符,那么这行就会混乱。

我改变了:



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




到下面的命令(只删除几个字符);而且,它运作良好。看起来它是Cisco IOS CLI限制。



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