Использование каналов в комментарии, выполненном с помощью Plink из PowerShell

В PowerShell я использую Plink для подключения по ssh к устройству NetScaler.

Все работает нормально, но запуск скрипта занимает очень много времени из-за объема данных, загружаемых с удаленного устройства на локальную машину, где я запускаю PowerShell.

Вот сценарий:

$log = C:\plink.exe -batch -l User -pw PWD 10.1.1.1 "shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz""

Чтобы повысить производительность, мне нужно уменьшить объем данных, передаваемых с устройства.
Все, что мне нужно, это только первая часть домена \w+\, поэтому я попытался добавить | cut –d . –f 1, но получил следующее:

cut : The term 'cut' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:144
+ ... hell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f ...
+                                                               ~~~
+ CategoryInfo          : ObjectNotFound: (cut:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException 

Я пробовал разные способы избежать | и пытался поместить команду в переменную или в файл и использовать переключатель –m.

Все выходит с тем же результатом.

Команда cut отлично работает, когда я использую PuTTY для подключения к устройству по ssh.

Это проблема с PowerShell, Plink или обоими? Могу ли я использовать команду cut без канала? Или есть другой способ вернуть только часть \w+\?

Вот результаты различных попыток заставить cut работать (не разрешено загружать скриншоты с работы)

PS C:\windows\system32> C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1"
 Done
                                                      ^^^
ERROR: No such command
C:\NetScalerBackup\plink.exe : ERROR: No such command
At line:1 char:1
+ C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS shell  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (ERROR: No such command:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PS C:\windows\system32> C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS "shell `"zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1`""
Done
                                                        ^^^
ERROR: No such command
C:\NetScalerBackup\plink.exe : ERROR: No such command
At line:1 char:1
+ C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS "shell ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (ERROR: No such command:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

PS C:\windows\system32> C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS shell zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1
cut : The term 'cut' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:122
+ ... shell zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f ...
+                                                               ~~~
+ CategoryInfo          : ObjectNotFound: (cut:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Обновление @Martin: когда я пытаюсь

"shell `"zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1`"`nexit`n" | C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS

Я получил:

shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1"
exit


Done
> shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1"
grep: unknown directories method
ERROR: 
> exit
Bye!

Если я уберу обратную галочку в кавычках (`")

"shell zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1`nexit`n" | C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS

Это ответ:

Done
> shell zgrep -oE '\w+\.aramco\.com' /var/log/ns.log.0.gz | cut -d . -f1
                                                            ^^^
ERROR: No such command
> exit
Bye!

person mattnicola    schedule 23.05.2017    source источник
comment
Я не могу представить, как у вас могла возникнуть такая же проблема с -m.   -  person Martin Prikryl    schedule 23.05.2017


Ответы (1)


Внешние кавычки не нужны Plink и просто усложняют синтаксический анализ. Это должно работать:

$log = C:\plink.exe -batch -l User -pw PWD 10.1.1.1 shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f"

Если вы хотите сохранить внешние кавычки, вам нужно избежать внутренних кавычек:

$log = C:\plink.exe -batch -l User -pw PWD 10.1.1.1 "shell `"zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f`""
person Martin Prikryl    schedule 23.05.2017
comment
Та же проблема. Все, что я добавляю после |, PowerShell считает необходимым выполнить команду. Есть ли альтернатива использованию | - person mattnicola; 24.05.2017
comment
Работает на меня. Покажите нам скриншот консоли PowerShell с командой и выводом (ошибка). - person Martin Prikryl; 24.05.2017
comment
Не могу загрузить скриншоты с работы. Надеюсь, обновления, которые я сделал для вопроса, читабельны. - person mattnicola; 24.05.2017
comment
Попытки в соответствии с моими предложениями показывают C:\NetScalerBackup\plink.exe : ОШИБКА: Нет такой команды — нет никаких упоминаний о проблемах PowerShell с каналом. Сообщение об ошибке, вероятно, приходит с сервера, так что вы на шаг впереди. Покажите нам стенограмму сеанса PuTTY, где вы выполняете ту же команду. - person Martin Prikryl; 24.05.2017
comment
Из Putty работает только тот id C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1" - person mattnicola; 24.05.2017
comment
Вы действительно имеете в виду, что запускаете plink.exe из PuTTY? - person Martin Prikryl; 24.05.2017
comment
не уверен, что вы подразумеваете под запуском Plink.exe из PuTTY. Я пробовал использовать функцию командной строки PuTTY, но до сих пор не радуюсь. - person mattnicola; 25.05.2017
comment
Я имею в виду, если вы действительно запустите эту буквальную команду в PuTTY, включая путь plink.exe: C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1". Или, если вы на самом деле запускаете только shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1" - person Martin Prikryl; 25.05.2017
comment
запуск Plink.exe из PuTTY не сработал (возможно ли???). В Putty я запустил shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1". Я могу передать grep без проблем, shell "zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | grep www работает как положено. может быть проблема с переменными среды (или эквивалентом Unix) - person mattnicola; 25.05.2017
comment
Нет, вы не должны запускать Plink из PuTTY. Но ранее вы утверждали, что сделайте это. Вот почему я спросил. - Да, это может быть проблема окружающей среды. Попробуйте добавить переключатель -t к plink.exe. - person Martin Prikryl; 25.05.2017
comment
Переключатель -t не помог или не имел никакого значения. - person mattnicola; 29.05.2017
comment
Хорошо, тогда как крайний вариант: $log = "shell `"zgrep -oE '\w+\.some\.com' /var/log/ns.log.0.gz | cut -d . -f1`"`nexit`n" | C:\NetScalerBackup\plink.exe -batch -l $un -pw $pwd $PrimaryNS - person Martin Prikryl; 29.05.2017
comment
Я обновил основной вопрос. но ваше предложение не сработало. - person mattnicola; 31.05.2017
comment
На самом деле все мои рекомендации работают. Это ваш сервер странно обрабатывает эти вещи. Ваш вопрос больше не о Plink или PowerShell. И поэтому здесь это не по теме. - person Martin Prikryl; 31.05.2017