Правильно экранирующая команда для powershell.exe (команда запуска из CMD.exe) - PullRequest
1 голос
/ 19 марта 2019

Как правильно выбрать следующую команду?Мне нужно запустить команду powershell из CMD, потому что это значение stubpath.Значение реестра для stubpath не может запускать команды powershell.Команда проверена и работает правильно.Проблема состоит только в том, чтобы заставить его работать через powershell.exe -command "..."

powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "(Get-WmiObject -Class Win32_Printer | where-object { $_.Name -eq ("IPL" + ($env:COMPUTERNAME).Substring(1, 4)) }).SetDefaultPrinter()"

Сейчас он ломает черту в "IPL" из-за двойных кавычек.Я думаю, что я должен бежать из трубы хорошо.

Очень ценится!

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

вы можете попробовать это

powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& { (Get-WmiObject -Class Win32_Printer | where-object { $_.Name -eq (\"IPL\" + ($env:COMPUTERNAME).Substring(1, 4)) }).SetDefaultPrinter() }"

В противном случае я хотел бы избежать кодирования команды в base64, а затем использовать powershell -encodedcommand, например,

powershell.exe -NoProfile -ExecutionPolicy Bypass -EncodedCommand KABHAGUAdAAtAFcAbQBpAE8AYgBqAGUAYwB0ACAALQBDAGwAYQBzAHMAIABXAGkAbgAzADIAXwBQAHIAaQBuAHQAZQByACAAfAAgAHcAaABlAHIAZQAtAG8AYgBqAGUAYwB0ACAAewAgACQAXwAuAE4AYQBtAGUAIAAtAGUAcQAgACgAIgBJAFAATAAiACAAKwAgACgAJABlAG4AdgA6AEMATwBNAFAAVQBUAEUAUgBOAEEATQBFACkALgBTAHUAYgBzAHQAcgBpAG4AZwAoADEALAAgADQAKQApACAAfQApAC4AUwBlAHQARABlAGYAYQB1AGwAdABQAHIAaQBuAHQAZQByACgAKQA=

вот ссылка на информацию о том, как кодировать ваши команды. это даже работает для полных многострочных скриптов

https://blogs.msdn.microsoft.com/timid/2014/03/26/powershell-encodedcommand-and-round-trips/

или вы можете использовать этот сайт для кодирования / декодирования

https://www.base64decode.org/

1 голос
/ 19 марта 2019

Нашел, я оставлю это здесь, так как это может быть полезно для других пользователей:

Оригинальная команда powershell:

(Get-WmiObject -Class Win32_Printer | where-object { $_.Name -eq ("IPL" + ($env:COMPUTERNAME).Substring(1, 4)) }).SetDefaultPrinter()

Чтобы запустить из CMD.EXE, вы должны экранировать двойные кавычки, такие как \"IPL\" вместо "IPL"

Рабочая команда:

powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "(Get-WmiObject -Class Win32_Printer | where-object { $_.Name -eq (\"IPL\" + ($env:COMPUTERNAME).Substring(1, 4)) }).SetDefaultPrinter()"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...