您的位置:首页 > 运维架构 > Shell

[Azure]基于Invoke-Parallel对Azure ARM虚拟机批量开关机

2017-01-06 20:27 579 查看
这个脚本基于Invoke-Parallel方法并行开关Azure ARM虚拟机:

Invoke-Parallel脚本下载地址和介绍请参考链接:https://gallery.technet.microsoft.com/scriptcenter/Run-Parallel-Parallel-377fd430

脚本如下:

#AzurePortalLoginUsername是Azure的Portal登录名,例如XXX@XXXX.partner.onmschina.cn
$AzurePortalLoginUsername = "XXXXXXXXXXXXX";
#AzurePortalLoginPassword是登陆密码
$AzurePortalLoginPassword = "XXXXXXXXXXXXX";
#虚拟机所在的订阅名称
$SubscriptionName = "XXXXXXXXXXXXX";

function Invoke-Parallel {...}

#定义登陆的Credential
$e1=Get-AzureRmEnvironment -Name AzureChinaCloud;
$Cred = New-Object System.Management.Automation.PSCredential($AzurePortalLoginUsername,(ConvertTo-SecureString $AzurePortalLoginPassword -AsPlainText -Force));
$AzureRMCred = Get-Credential -Credential $Cred;
#登陆
Login-AzureRmAccount -Environment $e1 -Credential $AzureRMCred;

#定义要开/关的虚拟机ResourceGroupName是虚拟机资源组&虚拟机列表,等号左侧是虚拟机所属的资源组名称,等号右侧是资源组下要开/关的虚拟机名字,如果有多台,用分号分隔
$VMs = @{
"ResourceGroupName1" = "VM1;VM2;VM3 ....";
"ResourceGroupName2" = "VM1;VM2;VM3 ....";
#....
"ResourceGroupNameN" = "VM1;VM2;VM3 ...."
};

#切换到这个订阅下
Select-AzureRmSubscription -SubscriptionName $SubscriptionName;

foreach ($ResourceGroupName in $VMs.Keys)
{
#获取到这个ResourceGroup下要开/关机的虚拟机的名字列表
$vmnames = @();
foreach($vmname in $VMs[$ResourceGroupName].Split(";"))
{
$vmnames += $vmname;
}

#如果要开机,用下面这条命令,如果要关机,就把这条命令注释掉
$vmnames | Invoke-Parallel -ImportVariables -NoCloseOnTimeout -ScriptBlock { Start-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $_ }

#如果要关机,把下面这条命令的#号去掉,把上面Start-AzureRmVM注释掉(前面加#号)
#$vmnames | Invoke-Parallel -ImportVariables -NoCloseOnTimeout -ScriptBlock { Stop-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $_ -Force }
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息