Azure VM Auto Start/Stop
前提条件
Param
(
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]
[String]
$AzSubscriptionId,
[Parameter(Mandatory=$false)]
[String]
$AzResourceGroup,
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]
[String]
$AzVMList="All",
[Parameter(Mandatory=$true)][ValidateSet("Start","Stop")]
[String]
$Action
)
$servicePrincipalConnection=Get-AutomationConnection -Name "AzureRunAsConnection"
"Logging in to Azure..."
Connect-AzAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
Select-AzSubscription -SubscriptionId $AzSubscriptionId
if ([String]::IsNullOrEmpty($AzResourceGroup))
{
if($AzVMList -ne "All")
{
$AzVMs = $AzVMList.Split(",")
[System.Collections.ArrayList]$AzVMsToHandle = $AzVMs
}
else
{
$AzVMs = (Get-AzVM).Name
[System.Collections.ArrayList]$AzVMsToHandle = $AzVMs
}
}
else
{
if($AzVMList -ne "All")
{
$AzVMs = $AzVMList.Split(",")
[System.Collections.ArrayList]$AzVMsToHandle = $AzVMs
}
else
{
$AzVMs = (Get-AzVM -ResourceGroupName $AzResourceGroup).Name
[System.Collections.ArrayList]$AzVMsToHandle = $AzVMs
}
}
foreach($AzVM in $AzVMsToHandle)
{
if(!(Get-AzVM | ? {$_.Name -eq $AzVM}))
{
throw " AzureVM : [$AzVM] - Does not exist! - Check your inputs "
}
}
if($Action -eq "Stop")
{
Write-Output "Stopping VMs";
foreach ($AzVM in $AzVMsToHandle)
{
$AzVMInfo = Get-AzVM -Name $AzVM -Status
$AzVMInfo_State = $AzVMInfo.PowerState
Write-Output "Azure VM: $AzVM , Status before $Action is $AzVMInfo_State"
}
foreach ($AzVM in $AzVMsToHandle)
{
Get-AzVM -Name $AzVM | Stop-AzVM -Force
}
Start-Sleep -Seconds 45
Write-Output "Waiting for latest power status"
foreach ($AzVM in $AzVMsToHandle)
{
$AzVMInfo = Get-AzVM -Name $AzVM -Status
$AzVMInfo_State = $AzVMInfo.PowerState
Write-Output "Azure VM: $AzVM , Status after $Action is $AzVMInfo_State"
}
}
else
{
Write-Output "Starting VMs";
foreach ($AzVM in $AzVMsToHandle)
{
$AzVMInfo = Get-AzVM -Name $AzVM -Status
$AzVMInfo_State = $AzVMInfo.PowerState
Write-Output "Azure VM: $AzVM , Status before $Action is $AzVMInfo_State"
}
foreach ($AzVM in $AzVMsToHandle)
{
Get-AzVM -Name $AzVM | Start-AzVM -NoWait
}
}
本文来自博客园,作者:Jas0n0ss,转载请注明原文链接:https://www.cnblogs.com/Jas0n0ss/p/azure_auto_start_stop.html
分类:
Cloud
标签:
Automation
, Azure
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探