我有以下参数定义。在此脚本中,我必须拥有用户的访问ID,访问密钥和帐户名称。我还必须拥有设备ID,设备名称或显示名称。最后,我要求包含一个或多个属性名称和相关值。
该脚本使用此信息将属性名称和值添加到设备(在我们的监视系统中)。现在,我需要添加对删除设备的支持,但我无法弄清楚如何更改参数定义。
我正在考虑使用[switch]来确定用户是想添加还是删除属性。如果用户在运行脚本时包含-Add开关,那么我将同时需要$ PropertyNames和$ PropertyValues。如果它们包含-Delete,那么我只需要$ PropertyName。
实现这一目标的最佳方法是什么?有一个名为“Operation”的参数会更好,它会采用“Add”或“Delete”,然后将PropertyName / Values需求基于$ Operation的值吗?
感谢。代码段如下:
[CmdletBinding(DefaultParameterSetName=’Default’)]
Param (
[Parameter(Mandatory=$True, ParameterSetName=’Default’)]
[Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)]
[Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)]
[string]$AccessId,
[Parameter(Mandatory=$True, ParameterSetName=’Default’)]
[Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)]
[Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)]
[string]$AccessKey,
[Parameter(Mandatory=$True, ParameterSetName=’Default’)]
[Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)]
[Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)]
[string]$AccountName,
[Parameter(Mandatory=$True,ParameterSetName=’Default’)]
[int]$DeviceId,
[Parameter(Mandatory=$True,ParameterSetName=’NameFilter’)]
[string]$DeviceDisplayName,
[Parameter(Mandatory=$True,ParameterSetName=’IPFilter’)]
[string]$DeviceName,
[Parameter(Mandatory=$True, ParameterSetName=’Default’)]
[Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)]
[Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)]
[string[]]$PropertyNames,
[Parameter(Mandatory=$True, ParameterSetName=’Default’)]
[Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)]
[Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)]
[string[]]$PropertyValues,
[switch]$WriteLog,
[string]$LogPath
)
答案 0 :(得分:2)
如果参数在所有参数集中都可用,则您不需要为每个参数设置单独的[Parameter()]
属性,除非它们需要不同集合中的唯一属性。
可以按照您想要的方式使用开关,您需要将其与所有其他组进行多路复用。因此,如果您现在拥有的3套中的每一套都可用于-Add
或-Remove
方案,那么您现在将使用6种不同的参数集。
function Invoke-Thing {
[CmdletBinding(DefaultParameterSetName='DefaultAdd')]
Param (
[Parameter(Mandatory=$True)]
[string]$AccessId,
[Parameter(Mandatory=$True)]
[string]$AccessKey,
[Parameter(Mandatory=$True)]
[string]$AccountName,
[Parameter(Mandatory=$True,ParameterSetName='DefaultAdd')]
[Parameter(Mandatory=$True,ParameterSetName='DefaultRemove')]
[int]$DeviceId,
[Parameter(Mandatory=$True,ParameterSetName='NameFilterAdd')]
[Parameter(Mandatory=$True,ParameterSetName='NameFilterRemove')]
[string]$DeviceDisplayName,
[Parameter(Mandatory=$True,ParameterSetName='IPFilterAdd')]
[Parameter(Mandatory=$True,ParameterSetName='IPFilterRemove')]
[string]$DeviceName,
[Parameter(Mandatory=$True)]
[string[]]$PropertyNames,
[Parameter(Mandatory=$True, ParameterSetName='DefaultAdd')]
[Parameter(Mandatory=$True, ParameterSetName='NameFilterAdd')]
[Parameter(Mandatory=$True, ParameterSetName='IPFilterAdd')]
[string[]]$PropertyValues,
[switch]$WriteLog,
[string]$LogPath ,
[Parameter(Mandatory=$True, ParameterSetName='DefaultAdd')]
[Parameter(Mandatory=$True, ParameterSetName='NameFilterAdd')]
[Parameter(Mandatory=$True, ParameterSetName='IPFilterAdd')]
[switch]$Add ,
[Parameter(Mandatory=$True, ParameterSetName='DefaultRemove')]
[Parameter(Mandatory=$True, ParameterSetName='NameFilterRemove')]
[Parameter(Mandatory=$True, ParameterSetName='IPFilterRemove')]
[switch]$Remove
)
}
这里显示的是Get-Help
输出:
NAME
Invoke-Thing
SYNTAX
Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceId <int> -PropertyNames <string[]> -PropertyValues <string[]> -Add [-WriteLog] [-LogPath <string>] [<CommonParameters>]
Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceId <int> -PropertyNames <string[]> -Remove [-WriteLog] [-LogPath <string>] [<CommonParameters>]
Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceDisplayName <string> -PropertyNames <string[]> -Remove [-WriteLog] [-LogPath <string>] [<CommonParameters>]
Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceDisplayName <string> -PropertyNames <string[]> -PropertyValues <string[]> -Add [-WriteLog] [-LogPath <string>] [<CommonParameters>]
Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceName <string> -PropertyNames <string[]> -Remove [-WriteLog] [-LogPath <string>] [<CommonParameters>]
Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceName <string> -PropertyNames <string[]> -PropertyValues <string[]> -Add [-WriteLog] [-LogPath <string>] [<CommonParameters>]
ALIASES
None
REMARKS
None