Выполнение команды CMD из сценария PowerShell

Я видел много подобных вопросов, но ни один из них не связан с выполнением команды CMD, такой как ipconfig из сценария PS (.ps1).

Если вы вводите эти команды на консоли PS, они работают нормально, но один раз в скрипте они не работают, ниже вы можете увидеть пример:

PS C:\Users\TestQro> adb devices
List of devices attached

PS C:\Users\TestQro> adb devices | Select-String -Quiet List
True

возвращает True, потому что Select-String находит слово «Список» в ответе на команду «устройства adb», что является ожидаемым поведением. Но если я пойду и вставлю ту же команду в файл сценария .ps1, PS ответит при запуске:

PS C:\TesterInfo> ./TunnerApp.ps1

cmdlet Write-Output at command pipeline position 1
Supply values for the following parameters: InputObject[0]:

Как мне вводить обычные команды CMD внутри скрипта? Почему в скрипте ждет параметров, а прямо в консоли работает нормально?


person Jorge Alberto Diaz    schedule 03.10.2018    source источник
comment
Чтобы получить помощь по неработающему коду: покажите неработающий код.   -  person Ansgar Wiechers    schedule 04.10.2018
comment
Привет, спасибо за помощь. В коде только эта строчка: adb devices | select-string -Тайный список   -  person Jorge Alberto Diaz    schedule 04.10.2018
comment
Затем попробуйте запустить чистый экземпляр PowerShell из окна CMD (powershell.exe -NoExit -NoProfile) и запустить скрипт оттуда. Вы все еще получаете ту же подсказку?   -  person Ansgar Wiechers    schedule 04.10.2018


Ответы (2)


На основе вашего вывода там

PS C:\TesterInfo> ./TunnerApp.ps1

cmdlet Write-Output at command pipeline position 1
Supply values for the following parameters: InputObject[0]:

Похоже, у вас есть оператор Write-Output где-то в вашем скрипте PowerShell, который не имеет никаких входных данных. Найдите где-нибудь пустой оператор Write-Output

person BT123    schedule 04.10.2018
comment
Привет, спасибо за помощь, но единственная строка в сценарии такая же, как и в консоли, поэтому я не знаю, почему параметр нужен в сценарии, а не при вводе: устройства adb | select-string -Тайный список - person Jorge Alberto Diaz; 04.10.2018
comment
@JorgeAlbertoDiaz Я вижу, может быть, попробуйте передать устройства adb в файл, получить его вывод и найти свое значение. adb devices > C:\temp\adb.txt $devices = Get-Content C:\temp\adb.txt - person BT123; 09.10.2018

То, что вы называете командами CMD, на самом деле является исполняемым файлом в папках Windows или System32 (или в каком-либо другом пути к переменной среды PATH). Таким образом, вы можете вызывать их так же, как любой исполняемый файл, используя оператор вызова:

& "$Env:SystemRoot\System32\IPCONFIG.exe"

about_Operators

person Maximilian Burszley    schedule 04.10.2018
comment
Внешние команды можно вызывать простыми словами без использования оператора вызова, если в имени файла или пути нет пробела. ipconfig, & ipconfig и & "ipconfig" должны делать то же самое. - person Ansgar Wiechers; 04.10.2018