Как определить дополнительные общие параметры для функций powershell, определенных в специальном модуле? - PullRequest
0 голосов
/ 27 февраля 2012

Я пишу модуль 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 Ответ

0 голосов
/ 28 февраля 2012

Большинство модулей, с которыми я сталкивался, используют функцию Connect-SomeService, а затем обрабатывают соединения / учетные данные в состоянии модуля. Может быть, с некоторыми его частями в сеансе вызывающих (переменная массива, отслеживающая соединения).

Как VMware PowerCLI ...

Connect-VIServer

Get-VM

Таким образом, вы запрашиваете учетные данные только в функции Connect-S3Service. Эта команда сохраняет соединение в переменной, которую все остальные функции используют по умолчанию. Однако, делая это таким образом, вы все равно захотите иметь общий параметр $ S3Service во всех других ваших функциях (если вы хотите отправлять задания только на определенное соединение), но по крайней мере на два параметра меньше.

...