Powershell просматривает файлы для передачи программе в качестве параметра - PullRequest
1 голос
/ 14 февраля 2020

У меня есть следующие две команды cmd.exe, но мне нужно преобразовать их в Powershell, и я с треском провалился, пытаясь понять это. Строка 1 находит dll, но только тогда, когда в папке bin и строке два берет все найденные записи и запускает с ней команду, например bin \ Debug \ file, bin \ Release \ file

Can кто-нибудь поможет? Единственным ограничением является то, что он находится внутри файла бегунка yaml, поэтому я не думаю, что могу разделить строки для каждой части, например, я не думаю, что Foreach-Object будет работать.

dir /s /b RunnerUnitTest.dll | findstr /r bin\\ > tests_list.txt
for /f %f in (tests_list.txt) do vstest.console.exe "%f"

Я получил как насколько это

(gci -r RunnerUnitTest.dll).FullName | select-string bin

спасибо.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Напишите многострочный сценарий powershell, чтобы выполнить эту работу, а затем вызовите этот сценарий у своего бегуна yaml.

powershell -file "c:\myscripts\runtests.ps1" "c:\mydlls\RunnerUnitTest.dll" "c:\mytests\tests_list.txt"
0 голосов
/ 14 февраля 2020

Одна команда (конвейер), разбитая на 3 строки для удобства чтения, для краткости использует встроенные псевдонимы команд (но имена параметров прописаны для долгосрочного использования). надежность):

gci -Recurse -Filter RunnerUnitTest.dll | 
  ? FullName -match bin\\ | 
    % { vstest.console.exe $_.FullName }
  • gci -Recurse -Filter RunnerUnitTest.dll находит все RunnerUnitTest.dll в поддереве текущего каталога; -Filter обеспечивает более быстрое сопоставление, чем использование (позиционно подразумеваемого) параметра -Path.

  • ? FullName -match bin\\ использует ? (Where-Object) для проверки .FullName ( полный путь) значения свойств объектов входной информации о файле для соответствующего регулярного выражения bin\\, то есть для литеральной подстроки bin\, и передает только соответствующие объекты информации о файле.

  • % { vstest.console.exe $_.FullName } использует % (ForEach-Object) для вызова vstest.console.exe с полным путем к каждому файлу.

Обратите внимание, что промежуточный файл со списком DLL для обработки не создается потому что в этом нет необходимости.


Если вам нужно передать вышеизложенное явному вызову интерфейса командной строки PowerShell, вам нужно сделать:

powershell -noprofile -command "gci -Recurse -Filter RunnerUnitTest.dll | ? FullName -match bin\\ | % { vstest.console.exe $_.FullName }"

Если вы используете PowerShell [Core] 6+, замените pwsh на powershell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...