Есть ли разница между «Read-Host -Prompt» и «Read-Host»?

#powershell

#powershell

Вопрос:

Я изучаю PowerShell и хочу знать разницу между

 Read-Host -Prompt "Text"
 

и

 Read-Host "Text"
 

Это одно и то же или есть какая-то разница, которую я не вижу?

Пример кода, который делает то же самое при выполнении

Ответ №1:

Это то же самое. Что здесь происходит, так это то, что параметры могут (иногда, обычно) использоваться именованно или позиционно.

Таким образом, в этом случае вы все еще указываете значение для -Prompt параметра, просто вы специально не ссылаетесь на него по имени.

Необычный способ увидеть, что это происходит, — с Trace-Command помощью командлета:

 Trace-Command -Name ParameterBinding -Expression { Read-Host "Hello" } -PSHost
 

Вывод:

 DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Read-Host]
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Read-Host]
DEBUG: ParameterBinding Information: 0 : BIND REMAININGARGUMENTS cmd line args to param: [Prompt]
DEBUG: ParameterBinding Information: 0 :     BIND arg [System.Collections.Generic.List`1[System.Object]] to parameter
[Prompt]
DEBUG: ParameterBinding Information: 0 :         COERCE arg to [System.Object]
DEBUG: ParameterBinding Information: 0 :             Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 :         BIND arg [System.Collections.Generic.List`1[System.Object]] to param
[Prompt] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Read-Host]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
Hello: hi
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
hi
 

Ответ №2:

Текст справки для Read-Host показывает синтаксическую диаграмму:

 PS> help Read-Host

Read-Host [[-Prompt] <Object>] [-AsSecureString]
          [-InformationAction {SilentlyContinue | Stop | Continue | Inquire | Ignore | Suspend}]
          [-InformationVariable <System.Stringr>] [<CommonParameters>]

...
 

Полное описание того, как следует читать эти синтаксические диаграммы, доступно во встроенной справке (см. help about_Command_Syntax ). Соответствующая часть:

 -- Brackets ([ ]) indicate optional items. A parameter and its value can be
   optional, or the name of a required parameter can be optional.
 

Таким образом, в случае -Prompt аргумента как параметр, так и его значение являются необязательными.