gpt4 book ai didi

powershell - 取决于另一个参数的Powershell脚本

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

这已经发布过一次,但是建议的解决方案并不能解决我的问题。我正在编写脚本,我希望我的参数之一是强制性的,但仅当较早的参数之一具有某个值时,我才希望它是强制性的。

例:

param([Parameter(Mandatory=$true, Position=0)]
[ValidateSet("Add","Delete")]
[string]$Command,

[Parameter(Mandatory=$true)]
[string]$Subject
)

我希望仅在Command参数的值为“Add”时才需要Subject参数。

我尝试使用ParameterSetName值,但这似乎不起作用。

最佳答案

您可以将主题设置为可选,并在脚本主体的开头模拟一个必需参数来处理需求,如下所示:

param(
[parameter(Mandatory=$true)][ValidateSet("Add","Delete")] [string]$Command,
[string] $Subject
)
if (($Command -eq 'Add') -and ($PSBoundParameters['Subject'] -eq $null)) {
$Subject = Read-Host 'Supply value for the parameter "Subject" (mandatory when the value of "Command" is "Add")'
}

如果未指定参数 Subject ,则条件 $PSBoundParameters['Subject'] -eq $null的评估结果为True。请注意,您不能简单地使用 $Subject -eq $null,因为如果省略参数,则 $ Subject 会初始化为空字符串。如果您不强制转换 $ Subject (即省略 [string]),那么如果省略,它将为null,但我想您不想这样做。

请注意,这将允许用户在出现提示时简单地单击[ENTER],将 $ Subject 留为空白,但这是必需参数的标准行为。如果您不希望这样做,则可以执行以下操作之一(这是在主体中处理此类复杂参数要求而不是参数声明的另一项优势)。

引发错误:
param(
[parameter(Mandatory=$true)][ValidateSet("Add","Delete")] [string]$Command,
[string] $Subject
)
if (($Command -eq 'Add') -and ($PSBoundParameters['Subject'] -eq $null)) {
$Subject = Read-Host 'Supply value for the parameter "Subject" (mandatory when the value of "Command" is "Add"'
if (-not $Subject) {
throw "The Subject may not be blank."
}
}

不断提示,直到提供一个值:
param(
[parameter(Mandatory=$true)][ValidateSet("Add","Delete")] [string]$Command,
[string] $Subject
)
if (($Command -eq 'Add') -and ($PSBoundParameters['Subject'] -eq $null)) {
do {
$Subject = Read-Host 'Supply value for the parameter "Subject" (mandatory when the value of "Command" is "Add"'
if (-not $Subject) {
Write-Host -NoNewline "The Subject may not be blank. "
}
} until ($Subject)
}

关于powershell - 取决于另一个参数的Powershell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17351339/

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