ТЛ; др
Добавление чего-то вроде -SourcePort 42
и -DestinationPort 666
к вашему вызову Start-abc
должно препятствовать этим интерактивным подсказкам (конечно, вы должны предоставить соответствующие значения вместо примеров значений 42
и 666
, используемых здесь).
Чтобы определить точное название этих параметров и справочную информацию, читайте дальше.
Если при вызове команды не предоставляются аргументы для всех ее обязательных параметров (параметров, которым для работы команды необходимы значения):
- PowerShell в интерактивном режиме запрашивает эти аргументы
- и только если вы предоставите все необходимые аргументы (используя допустимые значения), команда действительно будет выполнена.
Примечание: этот механизм запроса редко используется на практике и не работает со всеми типами параметров - см. эту проблему GitHub .
Если вы просто хотите запретить интерактивные приглашения при время выполнения , запустите вашу команду через новый экземпляр PowerShell, запущенный с -noninteractive
:
powershell.exe -noninteractive -file C:\path\to\pingtest.ps1
Таким образом, ваш скрипт не будет запрашивать и сообщать о ошибке вместо , которая указывает имя (первого) обязательного параметра, для которого нет аргумента был предоставлен.
Предупреждение : При обработке ошибок по умолчанию выполнение скрипта все равно будет продолжаться ; установка $ErrorActionPreference = 'Stop'
предотвратит это.
Если вы хотите определить во время разработки , какие параметры являются обязательными , используйте
Get-Command <command> -Syntax
.
Если необходимо и доступно, добавьте Get-Help -Detailed <command>
(или -Full
) или Get-Help -Parameter <parameterName> <command>
, чтобы узнать подробности о параметрах.
Однако обратите внимание, что пользовательские сценарии и функции могут не иметь справочной информации, связанной с ними.
Синтаксические диаграммы PowerShell не так легко расшифровать, но они говорят вам, какие параметры являются обязательными.
Используя в качестве примера командлет Get-Item
:
PS> Get-Command Get-Item -Syntax
Get-Item [-Path] <string[]> [-Filter <string>] [-Include <string[]>] [-Exclude <string[]>] [-Force] [-Credential <pscredential>] [-UseTransaction] [-Stream <string[]>] [<CommonParameters>]
Get-Item -LiteralPath <string[]> [-Filter <string>] [-Include <string[]>] [-Exclude <string[]>] [-Force] [-Credential <pscredential>] [-UseTransaction] [-Stream <string[]>] [<CommonParameters>]
Каждая выходная строка представляет отдельный набор параметров .
- Какие параметры отличают один набор параметров от другого, не очевидно; в этом случае это
-Path
против -LiteralPath
, что характерно для командлетов, связанных с провайдером.
В данном наборе параметров любой параметр, который не заключен в [...]
в целом (около оба параметр имя (например, -LiteralPath
) и параметр тип (например, <string[]>
)) является обязательным .
- Если только параметр имя заключен в
[...]
(например, [-Path]
), параметр также обязателен, но могут быть указаны аргументы позиционно - то есть вы можете опустить имя параметра и указать только аргумент (значение для привязки к параметру); например, вместо
Get-Item -Path foo.txt
вы можете указать только
Get-Item foo.txt
.
На основании вышеизложенного, вооруженный информацией о:
- какой набор параметров вы будете использовать
- каковы его обязательные параметры
затем вы можете вызывать вашу команду таким образом, чтобы аргументы предоставлялись всем обязательным параметрам и, таким образом, избегались интерактивные запросы.