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