У меня есть сценарий powershell, который создает учетную запись хранилища и BLOB-объектов для данной подписки, которая работает нормально. Имя подписки, группа ресурсов постоянно меняется для разных сред, таких как DEV, UAT, PROD
СТРУКТУРА МОЕГО ШАБЛОНА / КОДА:
param(
[string] $subscriptionName ="ABC",
[string] $resourceGroupName = "XYZ",
[string] $resourceGroupLocation ="westus",
[string] $templateFilePath = "template.json",
[string] $parametersFilePath = "parameters.json"
)
Function RegisterRP {
Param(
[string]$ResourceProviderNamespace
)
Write-Host "Registering resource provider '$ResourceProviderNamespace'";
Register-AzureRmResourceProvider -ProviderNamespace $ResourceProviderNamespace;
}
$ErrorActionPreference = "Stop"
$confirmExecution = Read-Host -Prompt "Hit Enter to continue."
if($confirmExecution -ne '') {
Write-Host "Script was stopped by user." -ForegroundColor Yellow
exit
}
# sign in
Write-Host "Logging in...";
Login-AzureRmAccount;
# select subscription
Write-Host "Selecting subscription '$subscriptionName'";
Select-AzureRmSubscription -SubscriptionName $subscriptionName;
# Register RPs
$resourceProviders = @("microsoft.storage");
if($resourceProviders.length) {
Write-Host "Registering resource providers"
foreach($resourceProvider in $resourceProviders) {
RegisterRP($resourceProvider);
}
}
#Create or check for existing resource group
$resourceGroup = Get-AzureRmResourceGroup -Name $resourceGroupName -ErrorAction SilentlyContinue
if(!$resourceGroup)
{
Write-Host "Resource group '$resourceGroupName' does not exist. To create a new resource group, please enter a location.";
if(!$resourceGroupLocation) {
$resourceGroupLocation = Read-Host "resourceGroupLocation";
}
Write-Host "Creating resource group '$resourceGroupName' in location '$resourceGroupLocation'";
New-AzureRmResourceGroup -Name $resourceGroupName -Location $resourceGroupLocation
}
else{
Write-Host "Using existing resource group '$resourceGroupName'";
}
# Start the deployment
Write-Host "Starting deployment...";
if(Test-Path $parametersFilePath) {
New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -Name $deploymentName -TemplateFile $templateFilePath -TemplateParameterFile $parametersFilePath -storageAccounts_name $storageAccountName
} else {
New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -Name $deploymentName -TemplateFile $templateFilePath; -storageAccounts_name $storageAccountName
}
Подход 1:
Создано несколько сценариев PowerShell для каждой среды
Создан 1 Сценарий PowerShell на основе меню, который вызывает другой скрипт и выполняется следующим образом: Выберите 1 для Dev, 2 для UAt, 3 для PROD, этот подход работает, но не эффективен.
Подход 2:
Я хотел бы объединить все сценарии и иметь только один сценарий для всех сред, а выбор на основе должен позволить мне создавать учетные записи хранения. Только изменение подписки и группы ресурсов, остальная структура PowerShell остается неизменной.
Я попытался использовать командлеты функции GET, и он выбирает, но все равно выдает ошибку
[string] $subscriptionName = Get-AzureSubscription,
[string] $resourceGroupName = Get-AzureRmLocation,
Если я попытаюсь использовать его, используя подход на основе массива, например, передачу значений, как показано ниже, я не смогу понять, как передать эти значения на основе массива в код и заставить его работать.
$environment=@('DEV','TEST','QA','PROD')
$resourcegroupname = @('test','test1','test2','test3')
$subscriptionName = @('devsub1','devsub2','test3','prod4')
Я пытаюсь вызвать функции, используя:
$environment[0]
$subscriptionName[0]
Возвращает значение, как показано ниже, если я выполняю его отдельно, но как передать эти значения в мой сценарий для создания учетной записи хранения?
DEV
devsub1
Запрос помощи эксперта, если кто-то сталкивался с такими сценариями ранее, и если вы можете помочь изменить вышеуказанный код и предоставить проверенный код, который будет очень полезен.
ПОДХОД 3:
$subscription = @(Get-AzureRmSubscription)
$resourcegroup = @(Get-AzureRmResourceGroup)
$Environment = @('DEV','TEST','QA','PROD')
$resourceGroupName = $resourcegroup | Out-GridView -PassThru -Title 'Pick the environment'
$subscriptionName = $subscription | Out-GridView -PassThru -Title 'Pick the subscription'
Write-Host "Subscription:" $subscriptionName
Write-Host "ResourceGroup:" $resourcegroup
ВЫХОД:
Если вы посмотрите на группу ресурсов, она не сможет выбрать опцию для группы ресурсов.
Подписка: <возвращает имя подписки>
ResourceGroup: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.PSResourceGroup Microsoft.Azure.Commands.ResourceManager.Cmd
lets.SdkModels.PSResourceGroup Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.PSResourceGroup Microsoft.Azure.Commands.Res
ourceManager.Cmdlets.SdkModels.PSResourceGroup