Запуск / остановка виртуальной машины Azure через webhook - PullRequest
1 голос
/ 23 апреля 2019

У нас есть несколько виртуальных машин в нашей среде Azure с несколькими группами ресурсов.Некоторые из групп ресурсов имеют несколько виртуальных машин.Теперь мы используем URL-триггеры, которые запускают или останавливают виртуальные машины.Это работает, но когда группа ресурсов содержит несколько виртуальных машин, все виртуальные машины будут запущены или все виртуальные машины остановятся вместо той, которую вы хотите запустить / остановить.

Пробовал несколько скриптов, но он не работает или выдает ошибки.

    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
})

1 Ответ

0 голосов
/ 23 апреля 2019

Вы можете попробовать приведенный ниже скрипт для Пуск / Стоп Виртуальная машина.

Запуск ВМ

$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 вы можете посмотреть здесь

...