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

Arrays Powershell脚本是否具有可发现的默认参数值?,arrays,powershell,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

我已经编写了一个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-stop
Services-start

参数
-stop
-start
是可发现的(当您点击tab键时),我很喜欢

目前,这将停止或启动阵列中的所有服务,我想做的是还可以选择停止或启动特定的服务

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

但我真正想做的是,将这些服务名称固定到数组中的服务名称,并以相同的方式进行发现,以便点击tab键将通过可用的默认值

结果可能是这样的:

服务-停止-服务:服务1


这可能吗?要将-service限制为my array中的服务?

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

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

    [Parameter()]
    [Switch]
    $Start,

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

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

Services -stop -service <tab>
服务-停止-服务

我将尝试一下,我可以使用相同的数组还是必须复制该部分?(在validateset中)您可以访问validateset,但它有点混乱:
$services=$MyInvocation.MyCommand.Parameters['Service'].Attributes |?{$\ TypeId.Name-eq'validateStatAttribute'}选择-ExpandProperty validValue