Как создать Runbook Azure Automation, который запустит виртуальную машину и затем выполнит (локальный или Azure) сценарий на виртуальной машине? - PullRequest
0 голосов
/ 09 января 2019

Я не хочу создавать Runbook, который будет запускать определенную (или управляемую параметрами) виртуальную машину, а затем запускать сценарий (локально или из хранилища больших двоичных объектов) на виртуальной машине.

Я проверил много документации, но пока безуспешно, чтобы заставить ее работать.

Что я получил до сих пор в той же группе ресурсов:

  1. ВМ создана

  2. Создана учетная запись автоматизации, в т.ч. Учетная запись запуска от имени

  3. Решение Azure Automation (OMS)

  4. Учетные данные (для моей учетной записи) под учетной записью автоматизации

  5. Использовал несколько галерей Runbook и другие примеры кода, используя функции, например, Старт-AzureVM ... Invoke-Command ...

Кто-нибудь из вас, хороших людей, может взять пример того, что нужно, в зависимости от используемых методов?

Начальная часть VM работает, но я не могу заставить работать логин + выполнение скрипта!

Я не высококвалифицированный разработчик, и у меня даже есть сомнения относительно выбора между языками сценариев в Azure.

Любая помощь будет высоко оценена.

Спасибо, Том

Invoke-Command

Invoke-AzureRmVMRunCommand

Set-AzureRmVMCustomScriptExtension

New-SSHSession + Invoke-SSHCommand

Код взят, например, из Галерея "Connect-AzureVM"

1 Ответ

0 голосов
/ 24 января 2019

параметр -ScriptPath of Invoke-AzureRmVMRunCommand не должен указывать на путь на удаленном компьютере, но должен указывать на локальный путь среды Runbook.

Пример кода, как показано ниже (создайте файл с именем atestfile.txt в удаленной виртуальной машине):

$ServicePrincipalConnection = Get-AutomationConnection -Name 'AzureRunAsConnection'

Add-AzureRmAccount `
    -ServicePrincipal `
    -TenantId $ServicePrincipalConnection.TenantId `
    -ApplicationId $ServicePrincipalConnection.ApplicationId `
    -CertificateThumbprint $ServicePrincipalConnection.CertificateThumbprint

#define resource group and vm name
$resourceGroup ="xxx"
$VmName ="xxx"

#define the scripts in $scriptblock, and add the content of $scriptblock to aa.ps1 in current directory of runbook
write-output "create test file"
$scriptblock = "New-Item -path c:\test -name atestfile.txt -itemtype file -force"
Out-File -FilePath aa.ps1 -InputObject $scriptblock

#Note that the -ScriptPath should not point to the remote path(in remote vm), it should point to the local path where you execute the command Invoke-AzureRmVMRunCommand
Invoke-AzureRmVMRunCommand -ResourceGroupName $resourceGroup -Name $VmName -CommandId 'RunPowerShellScript' -ScriptPath aa.ps1

#after execution, you can remove the file
Remove-Item -Path aa.ps1

write-output "done now"

Результат теста:

enter image description here

...