Как правильно указать путь команды PowerShell при использовании из CMD - PullRequest
0 голосов
/ 26 декабря 2018

Базовая команда, которая работает правильно:

Следующая команда выполняется в приглашении CMD и успешно выполняется.

"C:\Program Files\PowerShell\6.0.4\pwsh.exe" -NoLogo -NoProfile -NonInteractive -Command "&{D:\FooBar\myscript.ps1 -DependentAssembliesDirectoryPath 'D:\FooBar' -OutputPath 'D:\Baz Qux\output' -DocumentVersion 'whatever' -VisualStudioXmlDocumentationPaths 'D:\Baz Qux\input\my.xml' -AssemblyPaths  'D:\Baz Qux\input\my.exe','D:\Baz Qux\input\my1.dll','D:\Baz Qux\input\my2.dll','D:\Baz Qux\input\my3.dll' -MajorOpenApiSpecificationVersion 3 -MinorOpenApiSpecificationVersion 0 -Format YAML -DocumentDescriptionFilePath 'D:\Baz Qux\input\my.md'}; EXIT $LASTEXITCODE"

Однако, когда вводится пробелпо пути myscript.ps1 команда больше не работает.Это ожидается, так как мне нужно правильно указать путь.Хотя я не могу найти правильный способ цитирования.

Недопустимая попытка процитировать команду:

Я думал, что это сработало бы, основываясь на технике цитирования других путейв моей команде, но это не работает.

"C:\Program Files\PowerShell\6.0.4\pwsh.exe" -NoLogo -NoProfile -NonInteractive -Command "&{'D:\Foo Bar\myscript.ps1' -DependentAssembliesDirectoryPath 'D:\Foo Bar' -OutputPath 'D:\Baz Qux\output' -DocumentVersion 'whatever' -VisualStudioXmlDocumentationPaths 'D:\Baz Qux\input\my.xml' -AssemblyPaths  'D:\Baz Qux\input\my.exe','D:\Baz Qux\input\my1.dll','D:\Baz Qux\input\my2.dll','D:\Baz Qux\input\my3.dll' -MajorOpenApiSpecificationVersion 3 -MinorOpenApiSpecificationVersion 0 -Format YAML -DocumentDescriptionFilePath 'D:\Baz Qux\input\my.md'}; EXIT $LASTEXITCODE"

Эта команда приводит к куче ошибок, таких как,

At line:1 char:119
+ ... ionsDocumentGeneration.ps1' -DependentAssembliesDirectoryPath 'D:\Ope ...
+                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected token '-DependentAssembliesDirectoryPath' in expression or statement.

At line:1 char:153
+ ... rectoryPath 'D:\Foo Bar' -OutputPath ...
+                 ~~~~~~~~~~~~
Unexpected token ''D:\Foo Bar'' in expression or statement.

Опять же, так как это может быть немного трудно увидетьразница, которая отличается от работающей базовой команды и второй команды, заключается в том, что &{D:\FooBar\myscript.ps1 был изменен на &{'D:\Foo Bar\myscript.ps1', чтобы ввести пробел в пути и попытаться заключить в кавычки.

Обратите внимание

Я не могу вызвать команду в PowerShell, потому что она находится вне моего контроля.Он должен вызываться в командной строке cmd.exe.

1 Ответ

0 голосов
/ 27 декабря 2018

Проблема в том, что вам нужно использовать & в PowerShell для вызова имени команды / пути к исполняемому файлу, который указан и / или указан с помощью переменной :

Поэтому замените:

"&{'D:\Foo Bar\myscript.ps1' ... }; exit $LASTEXITCODE"

на:

"& { & 'D:\Foo Bar\myscript.ps1' ... }; exit $LASTEXITCODE"

Тем не менее, нет причин для переноса вызова вашего *.ps1 script в вызове script-block (& { ... }), так что вы можете упростить вашу команду до:

"& 'D:\Foo Bar\myscript.ps1' ...; exit $LASTEXITCODE"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...