2015-07-18 1 views
-1

J'essaie de faire la partie ci-dessous du code de manière relativement condensée (pour me connecter à un script beaucoup plus grand). Je n'ai aucun problème à envoyer plusieurs commandes de cette façon. Cependant, il y a quelque chose qui provoque l'étouffement de la commande multi-lignes. La syntaxe pour les comnmands Cisco semble être correcte. Je ne suis pas sûr si je cours dans une sorte de limite de caractères ou si j'ai besoin d'échapper à des caractères spécifiques dans $showintstatusCommands, mais rien que j'ai essayé semble fonctionner.Envoi d'une commande complexe, multi-lignes via plink vers Cisco Router = Comportement inexpliqué

Ce code:

$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 

produit le dessous quand je révèle le contenu des variables. $ShowIntstatusCommands semble être correct lorsqu'il fait écho localement. Remarquez, la fin de la 3ème ligne est coupée (le numéro 2 est manquant à la fin). Aussi la ligne suivante est un résidu étrange de la ligne précédente, qui commence par $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
+1

Quelle version de PowerShell êtes-vous? Cela aide-t-il si vous placez vos variables dans la chaîne que vous affectez à $ showintstatusCommands dans '{}' par exemple. '" ... $ {BGPInterface} ... $ {Date} ... $ {BGPInterface} .. "'? –

+0

J'utilise Powershell 4.0; cependant, quoi que je fasse; Je voudrais qu'il fonctionne sous Powershell 2. Je n'ai pas essayé de support. Merci pour la suggestion! Je vais pouvoir tester ça lundi. BTW: J'ai déjà essayé d'utiliser $ ($ BGPInterface) sans succès. Je me demande s'il y a une limite de caractères. Le dernier caractère de la variable $ BGPInterface n'est pas visible; et, la sortie de ligne suivante devient mutilée. – MKANET

+0

Hmm, si '$ ($ BGPInterface)' ne s'est pas corrigé alors '$ {BGPInterface}' ne le sera pas non plus. Il ne pense pas que ce soit un problème avec une limite de caractères. Je peux prendre cette chaîne entièrement développée avec la date et BGPInterface, la passer dans un petit test exe que j'ai écrit qui prend son stdin et le recrache sur la console. La chaîne entière vient à travers. –

Répondre

0

Lorsque vous écrivez à une variable dans un champ non global (comme script ou la portée de la fonction), PowerShell ne modifiera pas un niveau plus élevé variables du scope même nom. IOW $Response = 'foo' créera une copie locale de la variable $ Response et lui assignera 'foo'. Si votre intention est de modifier la variable globale $ Response, changez la ligne en $global:Response = ... Ce que vous voyez en $global:Response est résiduel, probablement des bricolages précédents.

+0

Merci, mais ce n'est pas ça. Je n'ai utilisé temporairement qu'une variable globale pour vider rapidement le contenu de la variable à l'invite de commande après l'exécution du script (à des fins de démonstration). Dans mon script original, il n'y a pas de variables globales définies. – MKANET

+0

Edit: Je viens d'éditer la question pour qu'elle ne soit pas "globale" (pour éviter toute confusion) – MKANET

0

J'ai enfin vérifié que le même comportement se produisait sur tous les périphériques distants si je tapais manuellement la commande ci-dessous. La ligne est brouillée si trop de caractères ont été utilisés.

je changé:

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

à la commande ci-dessous (suppression seulement quelques caractères); et ça a bien marché. Il semble que c'était une limite de Cisco IOS CLI.

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