2

Azure サブスクリプションの構成を自動化するために、いくつかの PowerShell コマンドレットを作成しています。ユースケースの 1 つは、開発者に独自の環境を構成させることです。現在、これには約 20 の手順が必要であり、エラーが発生しやすくなっています。デフォルトの azure コマンドレットをいくつか渡すと、Microsoft の Azure GUI と一連の指示を使用するよりも多くの間違いが発生することになります。私は、構成プロセス全体を管理し、多くの簿記とエラー チェックを抽象化するスクリプトが必要です。

これをすべてPowershellスクリプトで実行しようとしましたが、面倒です:

Function SelectSubscription()
    {
    $match = $False;
    while(!($match))
        {
        Write-Host "Enter a subscription from the following list:";
        DisplaySubscriptions;
        $global:subscription = Read-Host " ";

        (Get-AzureSubscription).GetEnumerator() | ForEach-Object
            {
            if ($_.SubscriptionName -eq $subscription)
                {
                Write-Host "Setting default subscription to: $subscription";
                Set-AzureSubscription -DefaultSubscription $subscription;
                $match = $True;
                };
            };
        if (!($match))
            {
            Write-Host "That does not match an available subscription.`n";
            };
        };
    }

(これにより、.publishsettings ファイルで確認できる現在のサブスクリプションが表示され、その中から選択するように求められます。入力が無効な場合は、再度尋ねられます。)

私が望むのは、Set-MyAzureSubscriptionこのすべてのロジックを含むようなカスタム コマンドレットです。後で接続できGet-Helpます。

そのため、VS2010 でコマンドレットを作成するように設定されておりGet-AzureSubscription、カスタム コマンドレット内から呼び出したいと考えています。PowerShell スクリプトのインスタンスを開いてコマンドレットを呼び出すことができます...そしてプログラムでテキストを貼り付けます...しかし、それは理想的とは言えません。

そのアプローチの詳細はこちら: Call azure powershell cmdlet from c# application fails

これを行う別の方法はありますか?これは私がこれまでにC#で持っているものです。

namespace Automated_Deployment_Cmdlets
{
 [Cmdlet(VerbsCommon.Set, "CustomSubscription", SupportsShouldProcess=true)]
 class CustomSubscription : PSCmdlet
    {
      [Parameter(Mandatory=true, ValueFromPipelineByPropertyName=true)]
      public string DefaultSubscription { get; set; }

     protected override void ProcessRecord()
     {
         base.ProcessRecord();
         // Call Get-AzureSubscription, then do some stuff -- as above.
      }
 }
}
4

1 に答える 1

1

このMSDN トピックは、C# コマンドレットの実装内から別のコマンドレットを簡単に呼び出す方法を示しています。

于 2013-02-07T02:41:28.930 に答える