В статье «Удаленное управление SQL Server» (опубликованной в этом же номере журнала) я рассказал об управлении серверами с помощью удаленного взаимодействия с PowerShell. Теперь мне бы хотелось рассмотреть, как эта же технология используется для управления серверами виртуальных машин Azure.

После того, как создана виртуальная машина Azure, можно задействовать две команды Azure для получения сертификата, сформированного для данной виртуальной машины. Этот сертификат используется для того, чтобы получить удаленный доступ к виртуальной машине путем установки сертификата в локальном хранилище.

Для начала воспользуемся командой Get-AzureVM, чтобы получить объект виртуальной машины для целевой виртуальной машины. Данный объект имеет свойство Microsoft.WindowsAzure.Commands.ServiceManagement.Model.PersistentVM, а это свойство PersistentVM имеет атрибут с именем DefaultWinRMCertificateThumbprint. Предоставим содержимое этого свойства в аргумент -Thumbprint команды Get-AzureCertificate, чтобы получить сертификат X509 для виртуальной машины.

$vm = Get-AzureVM -ServiceName $mySrvNm -Name $myVmNm
$myVmCert = $vm.виртуальной машины.DefaultWinRMCertificateThumbprint
$myX509cert = Get-AzureCertificate -ServiceName $mySrvNm -Thumbprint $myVmCert -ThumbprintAlgorithm sha1

После того, как сертификат получен, необходимо передать его в файл, но постоянный файл не нужен, поэтому создается временный файл, и содержимое свойства Data сертификата записывается в него.

$certtf = [IO.Path]::GetTempFileName()
$myX509cert.Data | Out-File $certtf

Теперь можно создать новый объект X509Certificate2 с использованием этого временного файла. Откройте локальное хранилище сертификатов и добавьте в него сертификат, а затем удалите временный файл.

$VMCert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $certtf
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store «Root», «LocalMachine»
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($VMCert)
$store.Close()
Remove-Item $certtf

После того, как сертификат виртуальной машины оказался в локальном хранилище сертификатов, с виртуальной машиной устанавливаются доверительные отношения. Теперь можно использовать команду Get-AzureWinRMUri, чтобы получить URI виртуальной машины Azure. Команда Get-Credential применяется для сохранения учетных данных для регистрации с административной учетной записью. Поэтому их можно использовать для различных задач. Обратите внимание, что если бы я добавил виртуальную машину Azure в локальный домен, то можно было бы задействовать учетные записи домена для доступа к виртуальной машине вместо специфического для виртуальной машины имени регистрации.

$uri = Get-AzureWinRMUri -ServiceName $mySrvNm -Name $myVmNm
$cred = Get-Credential AVMSQL01\myavmadmin

Используя те же сценарии, что и для серверов локального домена, можно без труда управлять виртуальными машинами Azure, передав переменную $uri в аргумент -ConnectionUri, а переменную $cred — в аргумент -Credential команды Invoke-Command.

Invoke-Command -ConnectionUri $uri -Credential $cred -filepath. \get-topmemoryprocess.ps1
Invoke-Command -ConnectionUri $uri -Credential $cred -scriptBlock { gwmi -query 'select * from Win32_LogicalDisk where DriveType=3' }
Invoke-Command -ConnectionUri $uri -Credential $cred -FilePath. \get-databaseinfo.ps1 -ArgumentList AVMSQL01
Invoke-Command -ConnectionUri $uri -Credential $cred -FilePath. \scan-errorlog.ps1 -ArgumentList AVMSQL01

Эти сценарии возвращают информацию об использовании памяти отдельными процессами для сервера, общем и доступном пространстве на диске, базах данных и их свойствах, и об ошибках в журнале errorlog для серверов (см. экран).

 

Вывод сценария PowerShell
Экран. Вывод сценария PowerShell

Возможность использовать удаленное взаимодействие для управления серверами чрезвычайно актуальна, если требуется быстро проверить работоспособность и сосредоточиться на важных для бизнеса задачах.