[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 }
}
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 }
}
相关文章推荐
- #新闻拍一拍# IBM 招聘广告要求应聘者具备至少 12 年 K8S 使用经验
- XP下使用虚拟机安装配置Solaris[多图]
- VirtualBox虚拟机XP与宿主机Ubuntu互访共享文件夹
- vivi下重新调整分区
- ARM Linux系统启动
- Linux及ARM Linux程序开发笔记(零基础入门篇)
- 每日安全资讯:微软 Azure 云服务被用于托管恶意软件
- Linux下三大免费桌面虚拟机评测
- Powershell 创建炫丽美观的Html报表
- 从Powershell ***脚本学到的如何执行后台runspace~
- PowerShell Script Analyzer, Script browser 和 Pester
- 大量删除contact导致Office365同步失败
- 当存储无可用空间时无法启动虚拟机
- Windows 8虚拟机不能全屏的解决方法
- 使用VMware Workstation虚拟机保护数据
- 用 GNOME Boxes 下载一个操作系统镜像
- PowerShell打开或关闭光驱
- PowerShell移动目录中指定文件的方法(非全部文件)
- Powershell小技巧之创建短网址