PowerShell参数集或动态参数
我试图找出哪种方法最适合以下情况 示例函数:PowerShell参数集或动态参数,powershell,dynamicparameters,parameter-sets,Powershell,Dynamicparameters,Parameter Sets,我试图找出哪种方法最适合以下情况 示例函数: Set-APICredentials { [CmdletBinding()] param( [Parameter(Mandatory)] [string]$APIUser, [Parameter(Mandatory)] [string]$APIKey, [Parameter(Mandatory)] [string]$PFXFile,
Set-APICredentials {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$APIUser,
[Parameter(Mandatory)]
[string]$APIKey,
[Parameter(Mandatory)]
[string]$PFXFile,
[Parameter(Mandatory)]
[string]$PFXPassword,
[switch]$AsVariable
)
begin{
$PFXPath = (Get-ChildItem -Name $PFXFile).FullName
}
process{
#create basic auth header from APIUser and APIKey
$basicAuthHeader
#create certificate object, verify private key, convert back into PFX Collection as bytes string variable
$clientAuthCertRaw
#create hashtable with credentials
$credentials = @{
basicAuthHeader = $basicAuthHeader
clienAuthCertRaw = $clientAuthCertRaw
}
}
end{
if ($AsVariable) {
Sglobal:APICreds = $credentials
} else {
Export-Clixml -InputObject $credentials -Path $PSScriptRoot\APICredentials.xml
}
}
}
如果(测试路径-Path$PSScriptRoot\APICredentials.xml)
为真,并且指定了-AsVariable
,则不需要/使用其他参数
否则,如果(测试路径-Path$PSScriptRoot\APICredentials.xml)
为false,则之前声明为必需的所有内容都是必需的
有没有办法创建条件参数集
我是否应该创建两个参数集,并在前面说明的逻辑为false时出错?或者我应该将-AsVariable
设置为一个参数,并使用动态参数处理其余参数
因为在大多数情况下,一切都是强制性的,只有在特殊情况下,
-AsVariable
才能单独使用。我认为将所有其他配置为动态参数都是错误的。动态参数是严格地处理您想要做的事情的方法,但我认为在大多数情况下,它们不值得付出努力
处理这个问题最简单的方法是不强制使用字符串参数,只在函数的开头进行检查
您有一个进程
块,但示例参数不接受管道输入。如果函数正在接受流水线输入,则考虑将该检查放在何处;可能在begin块中,但可能取决于参数
我也在玩弄滥用[ValidateScript({})]
的方法,但是这不太管用,因为如果你把它添加到[switch]
上,你就不能访问/检查其他参数来检查它们的值,如果你把它放在条件强制值上(检查文件是否存在)它将仅在绑定参数时运行验证
这也感觉有点像代码的味道?对您的用例感到好奇。动态参数是精确处理您想要做的事情的严格方法,但我认为在大多数情况下,它们不值得付出努力 处理这个问题最简单的方法是不强制使用字符串参数,只在函数的开头进行检查 您有一个
进程
块,但示例参数不接受管道输入。如果函数正在接受流水线输入,则考虑将该检查放在何处;可能在begin块中,但可能取决于参数
我也在玩弄滥用[ValidateScript({})]
的方法,但是这不太管用,因为如果你把它添加到[switch]
上,你就不能访问/检查其他参数来检查它们的值,如果你把它放在条件强制值上(检查文件是否存在)它将仅在绑定参数时运行验证
这也感觉有点像代码的味道?对您的用例感到好奇。我通常会使用begin块进行检查,是的。在本例中,我只是停止编写示例。不知道你说的代码气味是什么意思?用例中的4个参数实际上是APIUser、APIKey、PFXFile、PFXPassword。所有这些都将使用Clixml加载和保存,以便在RESTAPI包装模块中使用。目标是添加-AsVariable来选择性地保存当前ishell/传递到psremote会话的凭据,而不是总是从文件中提取和保存。我喜欢PowerShell的内置提示,比如缺少参数,并希望找出此场景的正确用例。我通常会使用begin块进行检查,是的。在本例中,我只是停止编写示例。不知道你说的代码气味是什么意思?用例中的4个参数实际上是APIUser、APIKey、PFXFile、PFXPassword。所有这些都将使用Clixml加载和保存,以便在RESTAPI包装模块中使用。目标是添加-AsVariable来选择性地保存当前ishell/传递到psremote会话的凭据,而不是总是从文件中提取和保存。我喜欢PowerShell的内置提示,比如缺少参数,并希望找出此场景的正确用例。示例中的流程块主要是伪代码,而不是实际函数。-AsVariable的目标是允许将凭据临时存储到全局变量范围,以便与模块中的其他函数一起使用,而不是存储到文件中。这也使得远程pssessions更容易使用。示例中的进程块主要是伪代码,而不是实际函数。-AsVariable的目标是允许将凭据临时存储到全局变量范围,以便与模块中的其他函数一起使用,而不是存储到文件中。这也使得远程pssessions更容易使用。