【发布时间】:2015-07-18 02:28:54
【问题描述】:
我正在尝试以相对简洁的方式完成以下代码部分(插入到更大的脚本中)。以这种方式发送多个命令我没有任何问题。但是,有些东西会导致多行命令最终阻塞。 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
【问题讨论】:
-
您使用的是哪个版本的 PowerShell?如果您将变量放在分配给
{}中的 $showintstatusCommands 的字符串中,是否有帮助?"...${BGPInterface}...${Date}...${BGPInterface}.."? -
我使用的是 Powershell 4.0;但是,无论我做什么;我希望它在 Powershell 2 下工作。我没有尝试过括号。感谢您的建议!我将能够在星期一测试这个。顺便说一句:我已经尝试过使用 $($BGPInterface) 没有任何成功。我想知道是否有某种字符限制。变量 $BGPInterface 的最后一个字符不可见;并且,下一行输出变得混乱。
-
嗯,如果
$($BGPInterface)没有修复,那么${BGPInterface}也不会修复。它不认为这是字符限制的问题。我可以将该字符串完全扩展为日期和 BGPInterface,将其传递到我编写的一个小测试 exe 中,该 exe 获取其标准输入并将其吐回控制台。整个字符串都通过了。 -
我实际上是指远程设备的终端会话垂直列字符限制。我在网上搜索过;但找不到任何东西。
标签: powershell ssh plink cisco-ios