#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
аргумента как параметр, так и его значение являются необязательными.