-1

我正在尝试以相对简洁的方式完成以下代码部分(以插入更大的脚本)。以这种方式发送多个命令我没有任何问题。但是,有些东西会导致多行命令最终阻塞。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
4

2 回答 2

0

当您在非全局范围(如脚本或函数范围)中写入变量时,PowerShell 不会修改任何更高级别的同名范围变量。IOW$Response = 'foo'将创建 $Response 变量的本地副本并将“foo”分配给它。如果您的意图是修改全局变量 $Response,则将行更改为$global:Response = ... What you see in $global:Responseis residual,可能来自以前的修补。

于 2015-07-18T04:42:07.167 回答
0

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

我变了:

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

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

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

于 2015-07-23T01:19:13.333 回答