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通用參數(例如,您只想將作業發送到特定連接),但至少可以減少兩個參數。

相關問題