#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 #…