Создать группу ресурсов как параллельную из консольного приложения в другой подписке

#c# #powershell #azure-powershell

#c# #powershell #azure-powershell

Вопрос:

Запрос: я хочу создать группу ресурсов как параллельную из консольного приложения в другой подписке.

Я разработал небольшое консольное приложение. Я установил Azure Powershell версии 3.0. вызов powershell с помощью system.automation.dll из консольного приложения. Пожалуйста, найдите код, который я использовал

Консольное приложение C #:

 class Program
    {
        static void Main(string[] args)
        {
            Program p=new Program();

            var resourceGroups=new List<ResourceGroup>();
            resourceGroups.Add(new ResourceGroup { AdUsername = "AdUsername", AdPassword = "AdPassword", SubscriptionId = "SubscriptionId1"});
            resourceGroups.Add(new ResourceGroup { AdUsername = "AdUsername", AdPassword = "AdPassword", SubscriptionId = "SubscriptionId2" });
            resourceGroups.Add(new ResourceGroup { AdUsername = "AdUsername", AdPassword = "AdPassword", SubscriptionId = "SubscriptionId2" });
            resourceGroups.Add(new ResourceGroup { AdUsername = "AdUsername", AdPassword = "AdPassword", SubscriptionId = "SubscriptionId3" });
            resourceGroups.Add(new ResourceGroup { AdUsername = "AdUsername", AdPassword = "AdPassword", SubscriptionId = "SubscriptionId1" });

            Parallel.ForEach(resourceGroups, (resourceGroup,pls,index)=> ParallelAccessPowershellScript(resourceGroup, index));

        }

        private static void ParallelAccessPowershellScript(ResourceGroup resourceGroup,long i)
        {
            try
            {
                string scriptPath = @"Microsoft_Imageloadjsontemplate.ps1";
                var addParametersToScriptFile = new Command(scriptPath);
                addParametersToScriptFile.Parameters.Add(new CommandParameter("AdUsername", resourceGroup.AdUsername));
                addParametersToScriptFile.Parameters.Add(new CommandParameter("AdPassword", resourceGroup.AdPassword));
                addParametersToScriptFile.Parameters.Add(new CommandParameter("SubscriptionId",resourceGroup.SubscriptionId));
                addParametersToScriptFile.Parameters.Add(new CommandParameter("ResourceGroupName", "testparallel" i));
                addParametersToScriptFile.Parameters.Add(new CommandParameter("LocationName", "location"));

                var runspace = RunspaceFactory.CreateRunspace();
                runspace.Open();
                var powerShell = PowerShell.Create();
                var scriptInvoker = new RunspaceInvoke(runspace);

                scriptInvoker.Invoke("Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned");
                var pipeline = powerShell.Runspace.CreatePipeline();
                pipeline.Commands.Add(addParametersToScriptFile);
                pipeline.Invoke();
                runspace.Close();
                runspace.Dispose();
                powerShell.Dispose();
            }
            catch (Exception e)
            {


            }


        }
    }
 

Сценарий Powershell

 param
(
 [Parameter(Mandatory = $true,HelpMessage="Azure Resource Group name,virtual network,availability are created in this name")]
    [String]
    $ResourceGroupName,
    [Parameter(Mandatory = $true,HelpMessage="Azure Resource Group created in this location")]
    [String]
    $LocationName,
    [string]
    $AdPassword,
    [string]
    $AdUserName,
    [string]
    $SubscriptionId
)
#login into powershell using active directory credentials
$securePassword = ConvertTo-SecureString $AdPassword -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($AdUserName, $securePassword)
Add-AzureRmAccount -Credential $credential  
#select the subscription as user chosed 
$AzureInfo = Get-AzureRmSubscription -SubscriptionId $SubscriptionId
Select-AzureRmSubscription -SubscriptionId $SubscriptionId -TenantId $AzureInfo.TenantId
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $LocationName
 

Но вся группа ресурсов создала одну и ту же подписку. Как я могу создать группу ресурсов как параллельную в другой подписке?

Комментарии:

1. Создает ли сценарий PowerShell RGS в разных подписках, когда вы запускаете его за пределами C #? (похоже, так и должно быть)

2. Привет, да, когда я попробовал из окна powershell, оно было создано правильно. Но когда я пытаюсь использовать c #, это противоречит другому сеансу.

3. Хорошо, я не уверен, что проблема в PS или в коде C #… Одна вещь, которую вы могли бы попробовать, — это использовать Set-AzureRMContext (вместо select subscription). Хотя что-то подсказывает мне, что это связано с тем, как создается контекст (с которым я менее знаком).

4. Привет, я также пробовал использовать AzureRMContext. Но все же исключения случались.

5. Хорошо, давайте посмотрим, смогу ли я найти кого-нибудь, кто мог бы быть более знаком со стороной C #…