“Read-Host -Prompt”和“Read-Host”之间有区别吗?

时间:2016-10-14 20:39:18

标签: powershell

我正在学习PowerShell并希望了解

之间的区别
Read-Host -Prompt "Text"

Read-Host "Text"

它是同一件事还是我看不到差异?

Example Code that does the same thing when executed

2 个答案:

答案 0 :(得分:3)

它是一回事。这里发生的是参数可以(有时,通常)使用命名或位置。

因此,在这种情况下,您仍然为-Prompt参数提供值,您只是不是通过名称专门引用它。

看到发生这种情况的一种奇特方法是使用Trace-Command cmdlet:

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

答案 1 :(得分: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参数,参数的值都是可选的。