2012-02-27 118 views
0

我正在写一个powershell模块来与AWS交互。大部分功能需要使用参数 - awsAccessKeyIdawsSecretKeycredentialsFile如何为定制模块中定义的powershell函数定义更多公共参数?

它将模糊的复制/粘贴这些参数到模块中的每个函数。

有没有办法为模块导出的函数集声明这些是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,然后将开关块一些常见功能。

回答

0

我遇到的大多数模块都使用Connect-SomeService函数,然后在模块状态下处理连接/凭证。也许在调用者会话中暴露了一些部分(数组变量保持跟踪连接)。

像VMware的PowerCLI ...

Connect-VIServer

Get-VM

这样,你只要求在一个连接-S3Service功能凭据。该命令将连接保存在默认情况下所有其他函数使用的变量中。然而,这样做意味着您仍然希望在所有其他函数中拥有$ S3Service通用参数(例如,您只想将作业发送到特定连接),但至少可以减少两个参数。