gpt4 book ai didi

windows - 如果脚本具有强制参数,则 Powershell 调用函数

转载 作者:可可西里 更新时间:2023-11-01 11:45:16 24 4
gpt4 key购买 nike

我是 PowerShell 的新手,但喜欢它在我们的 Windows 机器上自动执行大量任务。我喜欢您可以从其他脚本调用函数,但是我编写的脚本都使用用户可以提供的参数(因此同事更容易使用它们)。

在我的脚本中,有一个参数通常是必需的。我面临的问题是从带有强制参数的脚本中调用函数。

这是一个简单的例子:

Param(

[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$VirtualMachine=$(throw "Machine name missing!"),

[int]$Attempts = 150

)

Function DoSomething($VirtualMachine, $Attempts){

write("$VirtualMachine and $Attempts")

}

将此作为脚本运行,您将提供 -VirtualMachine "VMnameHere"-Attempts 123。运行它会产生 VMnameHere 和 123。完美的!但是..如果我尝试将其作为另一个脚本的函数来调用..

这里的例子:

. ".\Manage-Machine.ps1"

DoSomething -VirtualMachine "nwb-thisisamachine" -Attempts 500

这产生了一个错误:

Machine name missing!
At C:\Users\something\Desktop\Dump\play\Manage-Machine.ps1:33 char:28
+ [string]$VirtualMachine=$(throw "Machine name missing!"),
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Machine name missing!:String) [], RuntimeException
+ FullyQualifiedErrorId : Machine name missing!

这显然是因为该字段是必填字段。在这种情况下,我调用函数的方式有问题吗?如果它所属的脚本具有强制参数,是否有另一种调用函数的方法,因为如果我删除对参数的验证,一切都有效。

想要一些输入,

谢谢!

最佳答案

我会使用 [parameter(Mandatory = $true)] 并删除 =$(throw "Machine name missing!")

然后您可以使用 -NonInteractive 标志 ( documentation link ) 运行 powershell,任何缺少的强制参数都将导致错误,并且将返回非零退出代码。

此返回码应由您的 CI 进程获取,并且它自己会处理错误。

关于windows - 如果脚本具有强制参数,则 Powershell 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47477151/

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