gpt4 book ai didi

通过 webhook Azure 启动/停止 VM

转载 作者:行者123 更新时间:2023-12-05 07:23:45 26 4
gpt4 key购买 nike

我们的 Azure 环境中有多个虚拟机,具有多个资源组。某些资源组具有多个虚拟机。我们现在使用 URL 触发器 webhook 来启动或停止 VM。这是可行的,但是当资源组包含多个虚拟机时,所有虚拟机都将启动,或者所有虚拟机都将停止,而不是您想要启动/停止的虚拟机。

尝试了多个脚本,但它不起作用或给我错误。

    param(
[Parameter(Mandatory=$false)]
[object]
$WebHookData
)

write output "Data WebHook $WebHookData"

#retrieve ResourceGroup
$ResourceGroupName = $WebHookData.RequestBody
write output "Data ResourceGroup $ResourceGroupName"

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzureRmAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

$VMs = Get-AzureRmVM -ResourceGroupName $ResourceGroupName

if(!$VMs)
{
Write-Output -InputObject 'No VMs were found in the specified Resource Group.'
}
else
{
ForEach ($VM in $VMs)
{
$StartVM = Stop-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VM.Name -Force #-ErrorAction SilentlyContinue


}
}

$message = ConvertTo-Json -Compress -InputObject ([ordered]@{
headers = @{'content-type' = 'text/plain'}
body = ''
statusCode = 200
})

最佳答案

您可以尝试以下脚本来启动/停止虚拟机。

启动虚拟机

$connectionName = "AzureRunAsConnection"
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
$null = Add-AzureRmAccount -ServicePrincipal -TenantId $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
$VMs = Get-AzureRmResource|Where-Object {$_.Tags.Keys -eq "owner" -and $_.Tags.Values -eq "daneum"}
foreach ($VM in $VMs) {
if ($VM.ResourceType -eq "Microsoft.Compute/virtualMachines") {
Start-AzureRmVM -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name -Verbose
}
}

停止虚拟机

$connectionName = "AzureRunAsConnection"
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
$null = Add-AzureRmAccount -ServicePrincipal -TenantId $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
$VMs = Get-AzureRmResource|Where-Object {$_.Tags.Keys -eq "owner" -and $_.Tags.Values -eq "daneum"}
foreach ($VM in $VMs) {
if ($VM.ResourceType -eq "Microsoft.Compute/virtualMachines") {
Stop-AzureRmVM -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name -Force -Verbose
}
}

对于 webhook 集成过程,您可以查看 here

关于通过 webhook Azure 启动/停止 VM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55813013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com