2017-06-01 198 views
1

我不确定这是可能的,但我想尝试一下。如何在powershell中使用param函数中的变量?

这是什么,我试图做的基本知识:

function somefunction() { 
    $ListOfItems = (get-childitem c:\).name 
    param (
     [validateset($ListOfItems)][string]$Moo 
    ) 
} 

我不知道,如果一个变量可以在validateset或不能使用。它看起来并不如此。如果可以的话,我会如何去做这件事?

+0

这不是验证是如何工作的。 –

+0

我通常将服务器名称和名称与“名称”。但是,我正在尽可能让最终用户尽可能简单。在脚本中有选项是他习惯的东西。但是30台服务器上有超过100台打印机。我想将每台服务器设置为一个验证集,并且只在该验证堆栈中拥有来自该服务器的那些打印机。我也希望它能够自我更新,所以我不必重写它。 – David

+1

验证用于强制执行参数具有与您控制的列表匹配的值。它不打算用于验证打印机名称(可能会在任何给定的时间更改)与打印机列表(可能在任何给定时间会更改)。你仍然会在函数体中做这种检查。 –

回答

1

这是可行的。你以后ValidateScript

Function somefunction() { 
    param (
     [ValidateScript({$_ -in (Get-Childitem C:\).Name})] 
     [string]$Moo 
    ) 
} 

编辑
ValidateScript的默认错误是不是用户友好:

PS C:\> somefunction -Moo thing 

somefunction:在参数 '哞' 无法验证的说法。 “$ _ -in(Get-Childitem C :)。为值为”thing“的参数命名验证脚本未返回True结果。确定为什么 验证脚本失败,然后再次尝试该命令。

This StackOverflow post goes over how to generate custom error messages

0

在阅读完评论并根据评论完成研究之后,我相信没有简单的方法来做我想做的事情。

相关问题