Несколько команд в одной строке - Powershell, Escape " - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь запустить несколько команд powershell в одной строке через командную строку, выполнив следующую команду -

powershell -Command "$ auth = [System.Convert] :: ToBase64String ([System.Text.Encoding] :: UTF8.GetBytes ('admin' + ':' + 'admin')); Invoke-WebRequest - Uri "http://somehost:8080/xyz" -Метод: Get -Headers @ {" Authorization "=" Basic $ auth "; "Accept" = "application / xml"} -ContentType "application / xml" "

Однако я получаю следующую ошибку -

Базовый: термин «Базовый» не распознается как название командлета, функции, файл сценария или работающая программа. Проверьте правильность написания имени или, если путь был включен, проверьте, что путь правильный и попробуйте снова. В строке: 1 символ: 253 + ... {Authorization = Basic $ auth; Accept = application / xml} -ContentType Приложение / XML + ~~~~~ + CategoryInfo: ObjectNotFound: (Basic: String) [], CommandNotFou ndException + FullyQualifiedErrorId: CommandNotFoundException

Двойные кавычки в Invoke-WebRequest создают проблему. Я пытался уйти с помощью `, давая несколько двойных кавычек и пробовал разные комбинации, но тщетно. Пытался в течение 3 полных дней и, наконец, приехал сюда в качестве последнего средства. Пожалуйста, помогите в построении выше. У меня есть только доступ к CMD, и мне нужно только выполнить powershell оттуда. Следовательно, мне нужно использовать powershell -Command и после него должны следовать приведенные выше команды powershell.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Никаких забот .. Я наконец-то сработал -

powershell -Command "$ auth = [System.Convert] :: ToBase64String ([System.Text.Encoding] :: UTF8.GetBytes ('admin' + ':' + 'admin'));" Invoke-WebRequest -Uri 'http://someurl:8080/xyz' -метод: get -Headers @ {' Authorization '=' Basic '"+" $ auth "}";

0 голосов
/ 01 ноября 2018

Самый простой способ обойти странные последовательности символов - использовать закодированную команду :

$command = 'dir "c:\program files" '
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand

Вы можете комбинировать это с оператором строка формата , чтобы создать желаемую строку

...