【发布时间】:2012-02-27 18:00:40
【问题描述】:
我正在编写一个 powershell 模块来与 AWS 交互。大多数函数都需要接受作为要使用的凭据的参数 - awsAccessKeyId、awsSecretKey 和 credentialsFile。
将这些参数复制/粘贴到模块中的每个函数变得越来越枯燥。
对于模块导出的函数集,有没有办法声明这些是CommonParameters?
另外,有没有办法提取通用(即重复的)参数集处理开关语句,以便所有需要它的函数调用它?
这是一个示例函数:
function New-S3Client {
[CmdletBinding(DefaultParametersetName="credentialsFile")]
param
(
[parameter(Mandatory=$true, ParameterSetName="specifyKey")] [string]$accessKey,
[parameter(Mandatory=$true, ParameterSetName="specifyKey")] [string]$secretKey,
[parameter(ParameterSetName="credentialsFile")] [string]$credentialsFile = "$env:USERPROFILE\.aws\credentials"
)
switch($PsCmdlet.ParameterSetName)
{
"specifyKey" {
$env:awsAccessKeyId = $accessKey
$env:awsSecretKey = $secretKey
break
}
"credentialsFile" {
$env:awsAccessKeyId = Read-ValueForKeyFromFile -from $credentialsFile -field AWSAccessKeyId
$env:awsSecretKey = Read-ValueForKeyFromFile -from $credentialsFile -field AWSSecretKey
break
}
}
$config = New-Object Amazon.S3.AmazonS3Config
$config.WithServiceURL("https://s3.eu-west-1.amazonaws.com")
$client = New-Object Amazon.S3.AmazonS3Client($env:awsAccessKeyId, $env:awsSecretKey, $config)
return $client
}
我想提取参数2-4包括CommonParameters,然后将switch块提取到一些常用功能。
【问题讨论】:
标签: powershell refactoring powershell-2.0 powershell-module