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

来源:互联网 发布:2016西决g6知乎 编辑:程序博客网 时间:2024/05/16 14:07

这个脚本基于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 }}


86 0
原创粉丝点击