0

AWS と対話するための powershell モジュールを作成しています。ほとんどの関数は、使用する資格情報であるパラメータを取る必要があります - awsAccessKeyIdawsSecretKeyおよびcredentialsFile.

モジュール内の各関数にこれらのパラメーターをコピー/貼り付けするのは退屈です。

CommonParametersこれらがモジュールがエクスポートする一連の関数用であることを宣言する方法はありますか?

また、必要なすべての関数から呼び出せるように、共通の (つまり、重複した) パラメータ セット処理の switch-statement を抽出する方法はありますか?

関数の例を次に示します。

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
}

CommonParametersパラメータ 2 ~ 4 を に抽出し、次に switch ブロックをいくつかの一般的な関数に抽出したいと思います。

4

1 に答える 1

0

私が遭遇したほとんどのモジュールは Connect-SomeService 関数を使用し、モジュール状態内で接続/資格情報を処理します。おそらく、呼び出し元のセッションで公開されている一部の部分があります(接続を追跡する配列変数)。

VMware PowerCLI のように...

Connect-VIServer

Get-VM

この方法では、Connect-S3Service 関数でのみ資格情報を要求します。このコマンドは、他のすべての関数がデフォルトで使用する変数に接続を保存します。ただし、このようにすると、他のすべての関数に $S3Service 共通パラメーターが必要になりますが (特定の接続にのみジョブを送信する場合)、少なくとも 2 つのパラメーターが少なくなります。

于 2012-02-27T22:35:34.800 に答える