gpt4 book ai didi

powershell - PowerShell 是否忽略了脚本参数的声明位置?

转载 作者:行者123 更新时间:2023-12-03 00:47:36 25 4
gpt4 key购买 nike

我正在编写一个旨在由第三方应用程序调用的脚本。该应用程序将一堆参数传递给脚本,但在我的情况下只需要其中的几个。所有的参数都是按位置传递的。所以我只指定了所需的参数及其在 Param() 中的位置。 :

Param(
[Parameter(Position=2)][ValidateNotNullOrEmpty()]
[string]$thirdParam=$(throw "Third parameter isn't specified"),
[Parameter(Position=3)][ValidateNotNullOrEmpty()]
[string]$fourthParam=$(throw "Fourth parameter isn't specified"),
[Parameter(ValueFromRemainingArguments=$true)]
[String[]]$redundantParams
)
$thirdParam
$fourthParam

这是脚本的调用及其输出:
> .\Test1.ps1 1 2 3 4 5
1
2

看起来像 PowerShell忽略 Position 的值参数并将第一个和第二个传递的值绑定(bind)到 $thirdParam$fourthParam分别。即使是 Position value 大于传递的参数值的实际数量,它不会导致错误,就像它被忽略一样:
Param(
[Parameter(Position=1)][ValidateNotNullOrEmpty()]
[string]$secondParam=$(throw "Second parameter isn't specified"),
[Parameter(Position=2)][ValidateNotNullOrEmpty()]
[string]$thirdParam=$(throw "Third parameter isn't specified"),
[Parameter(ValueFromRemainingArguments=$true)]
[String[]]$redundantParams
)
$secondParam
$thirdParam
> .\Test1.ps1 1 2
1
2

在这两种情况下 PowerShell v.4.0用来:
> $PSVersionTable

Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.18444
BuildVersion 6.3.9600.18144
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2

为什么 PowerShell忽略 Position争论?是否可以制作 PowerShell采取 Position在上述情况下考虑值?

最佳答案

当您声明大于“0”的较低位置编号或大于“1”的数字之间的差异时,您的较低位置编号的位置将声明为“0”,并且一旦参数最接近大于最低的声明为“1”,下一个较大的声明为位置“2”等等。
喜欢这张照片:

enter image description here

你的输出将是:

7
8

关于powershell - PowerShell 是否忽略了脚本参数的声明位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40218571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com