Как определить дополнительные общие параметры для функций PowerShell, определенных в специальном модуле?

Я пишу модуль powershell для взаимодействия с AWS. Большинство функций должны принимать параметры, которые являются учетными данными для использования — awsAccessKeyId, awsSecretKey и credentialsFile.

Становится скучно копировать/вставлять эти параметры в каждую функцию в модуле.

Есть ли способ объявить, что это CommonParameters для набора функций, экспортируемых модулем?

Кроме того, есть ли способ извлечь общий (т.е. дублированный) оператор switch для обработки набора параметров, чтобы его могли вызывать все функции, которым он нужен?

Вот пример функции:

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, а затем блок переключения на какую-то общую функцию.


person Peter Mounce    schedule 27.02.2012    source источник


Ответы (1)


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

Как VMware PowerCLI...

Connect-VIServer

Get-VM

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

person risc    schedule 27.02.2012