我正在寻找一种方法来制作接收参数的 cmdlet,并且在键入时,它会根据预定义的选项数组提示完成建议。
我正在尝试这样的事情:
$vf = @('Veg', 'Fruit')
function Test-ArgumentCompleter {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]
[ValidateSet($vf)]
$Arg
)
}
Run Code Online (Sandbox Code Playgroud)
预期结果应该是:
在编写“Test-ArgumentCompleter F”时,单击 tub 按钮后,F 自动完成为 Fruit。
我正在使用 PowerShell 编写脚本,在某些时候我需要在函数参数上使用 ValidateSet。这是一个非常好的功能,但我需要的还不止这些。
例如
Function JustAnExample
{
param(
[Parameter(Mandatory=$false)][ValidateSet("IPAddress","Timezone","Cluster")]
[String]$Fields
)
write-host $Fields
}
Run Code Online (Sandbox Code Playgroud)
所以这个代码片段允许我从列表中选择一个项目
JustAnExample -Fields IPAddress
然后将其打印到屏幕上。我想知道是否有可能允许选择多个值并将它们传递给一个验证集中的功能,就像这样
JustAnExample -Fields IPAddress Cluster
Run Code Online (Sandbox Code Playgroud)
也许有一个图书馆,或者我只是错过了一些东西,但我真的找不到解决方案。
好的,所以我正在尝试编写一个高级函数,它使用两个不同的参数集名称,一个是Default另一个是TestAccountsOnly.
大部分工作正常,但是,这是我的问题:
的输出Get-Help New-SecondaryAccount在该部分中给了我这个SYNTAX:
SYNTAX
New-SecondaryAccount [-Name] <String> [-AccountType] <String> [-Password] <String> [-Description] <String> [-OwnerEmployeeID] <String>
[[-AdditionalDescription]] [<CommonParameters>]
New-SecondaryAccount [-Name] <String> [-AccountType] <String> [-Password] <String> [-CoreOrReserved] <String> [-Description] <String>
[-OwnerEmployeeID] <String> [[-AdditionalDescription]] [<CommonParameters>]
Run Code Online (Sandbox Code Playgroud)
从表面上看,这正是我想要的 - 一个参数集,我可以在其中验证少数不同的列表-AccountTypes,并在我有密码、描述等的地方移动,而在另一个参数集中,我只验证一个值AccountType并且有一个CoreOrReserve只属于TestAccountsOnly参数集的参数。
不幸的是,当尝试在 ISE 中测试这一点时,如果我输入:
New-SecondaryAccount -Name mehSomeAccount -AccountType,我从 IntelliSense 得到的唯一建议是Test。
你能不能用[ValidateSet()]我想要的方式,或者我只是做错了?
如果有人能指出这一点,我将非常感激!
Function New-SecondaryAccount(DefaultParameterSetName="Default")
{
<#
.Synopsis
Creates a new secondary account based on …Run Code Online (Sandbox Code Playgroud)