Powershell脚本具有可发现的参数默认值?

时间:2014-02-27 05:26:20

标签: arrays powershell

我已经为简单的启动或停止以及服务数组编写了一个powershell脚本。

这是我目前的剧本:

param([Switch] $Stop, [Switch] $Start) 

$services = @(
"Service1",
"Service2",
"Service3",
"etc"
)

if ($Start -eq $true) { 
    echo "Starting services..."
    get-service $services | start-Service
} 

if ($Stop -eq $true) { 
    echo "Stopping services..."
    get-service $services | stop-Service
} 

echo "Done."

该命令只是Services -stopServices -start

我喜欢的参数-stop-start是可以发现的(当你点击标签时)。

目前这将停止或启动数组中的所有服务,我想要做的还有停止或启动特定服务的选项。

如果我修改参数并接受服务名称,这很容易。

但我真正想做的是,将这些服务名称修复为我的数组中的那些服务名称,并以相同的方式发现,以便命中选项卡将通过可用的默认值?

结果可能是这样的:

Services -stop -service:Service1

这可能吗?将服务限制在我的数组中?

1 个答案:

答案 0 :(得分:3)

您可以使用ValidateSet属性执行此操作,例如:

param(
    [Parameter()]
    [Switch]
    $Stop,

    [Parameter()]
    [Switch]
    $Start,

    [Parameter()]
    [ValidateSet("Service1","Service2","Service3","etc")]
    [string[]]
    $Service
) 

...

您可以像这样调用制表符完成:

Services -stop -service <tab>