2016-11-25 4 views
1

Я хотел бы передать приведенную ниже запись в строку cmd из PowerShell. Что делать?Как избежать этих символов в powershell [], "", |

["192.168.10.1|443|Atulkatiyar|passw$h"]

Как написать команду PowerShell и выполнить ее в командной строке?

+2

Строка в вашем вопросе не является исполняемой и сама по себе, так как именно (с какой командой) вы хотите ее выполнить? –

ответ

0
cmd --% /c ["192.168.10.1|443|Atulkatiyar|passw$h"] 

--% является последовательность символов, все после того, как он передается исполняемому неизмененном

+0

Это не помогло –

+0

ну, я не уверен, чего вы пытаетесь достичь, '^' - это escape-символ в cmd, проверьте обновленный ответ. – 4c74356b41

+1

Параметр '-%' и [недоступен до версии PowerShell v3] (https://blogs.msdn.microsoft.com/powershell/2012/06/13/new-v3-language-features/) , –

0
cmd.exe /C "echo `[`"192.168.10.1`|443`|Atulkatiyar`|passw`$h`"`]" 
+0

Ничего не помогло. Ниже приведен сценарий моей силовой оболочки, который он выполнит в командной строке: $ avconfig = "' ['" 192.168.1.21' | 443' | atulkatiyar '| passw' $ h'" ']" write-host "avconfig:" $ avconfig $ configCmd = "" "c: \ Program Files \ VMware \ vРеализовать операции для агента Horizon \ Broker \ bin \ v4v_brokeragentcfg.exe" "" + "/ avcfg $ avconfig" write-host "invoking silent config command: cmd/c $ configCmd" Invoke-VMScript -VM $ vm -ScriptText "start cmd/c $ configCmd" -ScriptType Bat -GuestUser $ UID -GuestPassword $ PASSWD -Server $ viserver -Confirm: $ false Предполагают, что $ VM, $ UID, $ PASSWD, $ viserver указаны правильно –

+0

Если я запускаю ту же самую команду вручную в окнах cmd, она отлично работает "c: \ Program Files \ VMware \ vРеализовать операции для агента Horizon \ Broker \ bin \ v4v_bro keragentcfg.exe "+"/avcfg ["192.168.1.21 | 443 | atulkatiyar'passw $ h"] «Я старался со всеми опциями и избежал всех специальных чартеров. Даже вытащить, это то же самое, что мы должны предоставить в командной строке cmd, но не выполняем. –

0

Неясно, что значит «перейти к Cmd линии».

С точки зрения PowerShell, в если вы хотите строку в ваш вопрос будет рассматриваться как буквального, просто заключите его в '...' (одинарные кавычки, заключите внедренные одиночные кавычки, если таковые имеются, ''):

> '["192.168.10.1|443|Atulkatiyar|passw$h"]' 
["192.168.10.1|443|Atulkatiyar|passw$h"] 

Если вы хотите передать этот литерал cmd.exe, стандартный командный процессор, то же самое относится:

> cmd /c echo '["192.168.10.1|443|Atulkatiyar|passw$h"]' 
["192.168.10.1|443|Atulkatiyar|passw$h"] 

Тем не менее, ваша строка содержит $h, которая выглядит как ссылка на переменную PowerShell - если вы хотите, чтобы эта ссылка была развернута (интерполирована) во-первых, необходим другой подход; в следующих командах, конкатенация с бинарным оператором + используется:

> $h = 'Hi!' 

> ('["192.168.10.1|443|Atulkatiyar|passw' + $h + '"]') 
["192.168.10.1|443|Atulkatiyar|passwHi!"] 

> cmd /c echo ('["192.168.10.1|443|Atulkatiyar|passw' + $h + '"]') 
["192.168.10.1|443|Atulkatiyar|passwHi!"] 

В качестве альтернативы, и, как правило, вы можете использовать двойных -quoted строки вставлять ссылки на переменных ($<varName>) и подвыражение ($(...)), которые должны быть расширил (интерполированное: заменены на их значения) - в этом случае, используйте ` (Открывающая кавычка), чтобы избежать встроенных "$ символов, если это необходимо):

> "[`"192.168.10.1|443|Atulkatiyar|passw$h`"]" 
["192.168.10.1|443|Atulkatiyar|passwHi!"] 

> cmd /c echo "[`"192.168.10.1|443|Atulkatiyar|passw$h`"]" 
["192.168.10.1|443|Atulkatiyar|passwHi!"] 

Другие варианты:

  • Вы можете использовать бинарный -f оператор для строки форматирования, где LHS содержит заполнители, такие как {0} (первый операнд), которые экземпляр со значением на РИТ (на основе на каркас .NET-х String.Format method - смотри также here):
> ('["192.168.10.1|443|Atulkatiyar|passw{0}"]' -f $h) 
["192.168.10.1|443|Atulkatiyar|passwHi!"] 

> cmd /c echo ('["192.168.10.1|443|Atulkatiyar|passw{0}"]' -f $h) 
["192.168.10.1|443|Atulkatiyar|passwHi!"] 
  • В PSv3 +, как уже упоминалось, специальный --% «стоп-разборе» переключатель позволяет передавать остальные параметры вплоть до cmd.exeкак есть, кроме для cmd.exe -Style среды переменных ссылок, таких как %PATH%; обратите внимание, что это означает, что ссылки и подвыражения переменных PowerShell затем не расширен.
Смежные вопросы