gpt4 book ai didi

powershell - $pscmdlet.ShouldProcess(...) 返回 "Yes"或 "Yes to All"

转载 作者:行者123 更新时间:2023-12-04 07:29:19 25 4
gpt4 key购买 nike

我正在编写一个脚本来创建虚拟机,显然我想支持标准的确认/whatif 语义。但是,如果我要创建多台机器,最好能区分"is"和“全部是”,这样我就不必重新确认每台机器。

$pscmdlet.ShouldProcess 只返回一个 bool 值,那么我如何区分?

最佳答案

这是一个示例函数,它接受计算机名称的管道输入并实现您想要的行为:

function set-something {
[cmdletbinding(SupportsShouldProcess=$true)]
param(
[parameter(position=0, valuefrompipeline=$true)]
$Computer,
[parameter(position=1)]
$Value
)

process {
if ($pscmdlet.shouldprocess("Are you sure?")) {
write-host "setting machine $computer to $value"
}
}
}

"srv1","srv2","srv3" | set-something -value 42 -confirm

如果您回答"is",系统将提示您选择下一台机器。如果您回答“全部是”,您将不再收到提示。重要的部分是您使用管道输入 - 这会导致函数作为一个整体只执行一次,但是对于管道中的每个传入元素,函数内的进程块都会被调用一次。这让它记住“对所有人都是”,并且不会提示后续进程块调用。有道理?

更新:不需要使用管道来工作。重要的是函数必须能够保持状态,因此将数组或集合中的所有输入作为参数传递也可以。在这种情况下,您将自己遍历 $computer 集合。使用管道,shell 有效地为您循环。

关于powershell - $pscmdlet.ShouldProcess(...) 返回 "Yes"或 "Yes to All",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3763686/

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