Как определить дополнительные общие параметры для функций powershell, определенных в специальном модуле?
Я пишу модуль 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
, а затем переключить блок на некоторые общие функции.
1 ответ
Большинство модулей, с которыми я сталкивался, используют функцию Connect-SomeService и затем обрабатывают соединения / учетные данные в состоянии модуля. Может быть, с некоторыми его частями в сеансе вызывающих (переменная массива, отслеживающая соединения).
Как VMware PowerCLI...
Таким образом, вы запрашиваете учетные данные только в функции Connect-S3Service. Эта команда сохраняет соединение в переменной, которую все остальные функции используют по умолчанию. Однако, делая это таким образом, вы по-прежнему хотите иметь общий параметр $S3Service во всех других ваших функциях (если вы хотите отправлять задания только на определенное соединение), но по крайней мере на два параметра меньше.