Службы мониторинга на виртуальной машине Azure с помощью Azure Runbook

У меня есть сценарий Powershell, который перечисляет запущенные службы и их текущее состояние с помощью Get-WmiObject Win32_Service. Первоначальная версия, основанная на этом один, а затем модифицированный для Azure. Когда я запускаю скрипт в Powershell (без компонентов автоматизации Azure) на моем компьютере определения местоположения, он работает нормально, и я могу подключиться ко всем интересующим машинам, но когда я переношу его на модуль Runbook, я получаю следующую ошибку: «Get-WmiObject : Сервер RPC недоступен. "

В: Проблема с разрешениями для учетной записи автоматизации? Если да, то какую учетную запись я должен добавить на локальные машины, чтобы решить проблему?

В. Является ли Get-WmiObject недопустимым способом инициировать подключение? Если нет, что мне попробовать?

Код, который я использую, приведен ниже:

[CmdletBinding(SupportsShouldProcess = $true)]
param(

    # Servers to check
    [Parameter(Mandatory=$true)][string[]]$ServerList,

    # Services to check for
    [Parameter(Mandatory=$true)][string[]]$includeService
    ) 

# Following modifies the Write-Verbose behavior to turn the messages on globally for this session
$VerbosePreference = "Continue"

$connectionName = "AzureRunAsConnection"

# retry
$retry = 6
$syncOk = $false

$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName 
do
{ 
    try
    {  
        Add-AzureRmAccount -ServicePrincipal -TenantId $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
        $syncOk = $true
    }
    catch
    {
        $ErrorMessage = $_.Exception.Message
        $StackTrace = $_.Exception.StackTrace
        Write-Warning "Error during sync: $ErrorMessage, stack: $StackTrace. Retry attempts left: $retry"
        $retry = $retry - 1       
        Start-Sleep -s 60        
    }
} while (-not $syncOk -and $retry -ge 0)

Select-AzureRMSubscription -SubscriptionId $SubscriptionId -TenantId $servicePrincipalConnection.TenantId
$currentSubscription = Get-AzureRMSubscription -SubscriptionId $SubscriptionId -TenantId $servicePrincipalConnection.TenantId
Set-AzureRmContext -SubscriptionId $SubscriptionId;

$props=@()

[System.Collections.ArrayList]$unreachableServers = @()

Foreach($ServerName in ($ServerList)) 
{  
    try
    {
        $service = Get-WmiObject Win32_Service -ComputerName $servername
    }
    catch
    {}

    if ($Service -ne $NULL)  
    {  
        foreach ($item in $service)  
        {  
             #$item.DisplayName  
            Foreach($include in $includeService)   
            {                         
                     #write-host $include                                      
                if(($item.name).Contains($include) -eq $TRUE)  
                { 
                    $props += [pscustomobject]@{
                    servername = $ServerName
                    name =  $item.name
                    Status = $item.Status 
                    startmode = $item.startmode 
                    state = $item.state
                    serviceaccount=$item.startname
                    DisplayName =$item.displayname}
                }  
            }  
        }  
    } 
    else
    {
        Write-host "Failed to contact server: "$ServerName
        $unreachableServers.Add($ServerName)
    } 
}  

$props | Format-Table Servername,Name,startmode,state,serviceaccount,displayname  -AutoSize

person user2766185    schedule 05.04.2017    source источник


Ответы (2)


Я предполагаю, что вы используете функциональность гибридного рабочего места службы автоматизации Azure. По умолчанию он запускается под системной учетной записью. Однако вы можете использовать другую учетную запись для запуска модуля Runbook. Это описано здесь: Гибридный рабочий процесс автоматизации Azure; Загляните в раздел учетной записи RunAs. Используйте ту же учетную запись, которая работает, когда вы пробуете ее напрямую.

person anirudhgarg    schedule 02.05.2017
comment
Да, это решение, к которому я в конечном итоге пришел. В итоге: 1) Я создал настраиваемую гибридную рабочую группу 2) Я связал эту группу с учетными данными AD, чтобы иметь разрешения на рассматриваемых машинах. 3) Я запустил модуль Runbook в этой гибридной рабочей группе с параметром RunAs - person user2766185; 31.05.2017

Вы рассматривали возможность использования OMS? это звучит как лучший поступок.

В любом случае, чтобы ответить на ваши вопросы, я бы, вероятно, создал локального пользователя и конечную точку конфигурации PS для этого пользователя, чтобы подключиться, и подключиться, олицетворяя этого пользователя из учетной записи автоматизации, но, опять же, я бы даже не пошел по этому маршруту, я Я бы предпочел использовать OMS.

person 4c74356b41    schedule 05.04.2017
comment
Всегда ли службы Windows записывают в журнал событий при остановке или сбое? - person user2766185; 06.04.2017
comment
зависит от сервиса, очевидно - person 4c74356b41; 06.04.2017
comment
Есть ли у OMS возможность напрямую опрашивать службы, чтобы проверить их статус? Без этого, если служба не регистрирует все изменения своего состояния, OMS может пропустить сбой службы, тогда как более прямой подход будет работать более надежно. - person user2766185; 06.04.2017