我有一个脚本pingtest.ps1
,它会进行以下调用:
Start-abc -SourceIpaddress x.y.x.z -Protocol TCP -DestinationIpAddress a.c.d.e
在执行期间,它会提示您输入源端口和目标端口。
如何避免这些交互式提示,而是在同一脚本中传递值?
答案 0 :(得分:0)
tl; dr
在您的-SourcePort 42
呼叫中添加-DestinationPort 666
和Start-abc
之类的内容应避免出现这些交互式提示(当然,您必须提供适当的值来代替示例值42
和666
在这里使用)。
要确定这些参数的确切名称以及背景信息,请继续阅读
。如果命令的调用未向其所有强制性参数提供参数(要求值以使命令运行的参数):
注意:这种提示机制在实践中很少使用,并且不适用于所有参数类型-请参见this GitHub issue。
如果您只是想在运行时 中 防止交互式提示,请通过以{{ 1}} :
-noninteractive
这样,您的脚本不会提示并报告一个 error ,该错误指示了(第一个)必需参数的名称。没有提供任何论据。
注意事项:启用默认错误处理后,脚本执行仍会继续;设置powershell.exe -noninteractive -file C:\path\to\pingtest.ps1
可以防止这种情况。
如果要 在设计时确定哪些参数是必需的,请使用
$ErrorActionPreference = 'Stop'
。
如果必要且可用,请补充Get-Command <command> -Syntax
(或Get-Help -Detailed <command>
)或-Full
,以了解有关参数的详细信息。
但是请注意,自定义脚本和功能可能没有与之关联的帮助信息。
PowerShell的语法图并不是最容易理解的语法,但是它们确实告诉您哪些参数是必需的。
以Get-Help -Parameter <parameterName> <command>
cmdlet为例:
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
的比较,这是与提供程序相关的cmdlet常见的情况。在给定的参数集中, {em> 内的{em> 两者参数 name (例如-LiteralPath
)和参数 type (例如[...]
)是强制性的 。
-LiteralPath
中仅包含参数 name (例如<string[]>
),则该参数也是强制性的,但是可以按位置 指定参数-也就是说,您可以省略参数名称,仅指定 argument (要绑定的值参数);例如,您可以只指定[...]
而不是[-Path]
。基于上述内容,掌握了以下信息:
然后,您可以通过为所有必需参数提供参数的方式来调用命令,从而避免出现交互式提示。