如何创建将启动VM然后在VM上执行(本地或Azure)脚本的Azure Automation Runbook?

时间:2019-01-09 12:48:18

标签: azure-automation

我不想创建将启动特定(或参数控制)VM的Runbook,然后在该VM上运行脚本(本地或从Blob存储)。

我检查了很多文档,但是到目前为止,运气不好。

到目前为止,我在同一个资源组下得到了什么:

  1. 创建了VM

  2. 创建自动帐户,包括帐户运行方式

  3. Azure自动化解决方案(OMS)

  4. 自动化帐户下的凭据(到我自己的帐户)

  5. 使用了一些Runbook画廊和其他使用功能如 Start-AzureVM ... 调用命令...

你们当中的好人谁都可以根据所使用的方法来抽样确定所需准则的准则?

VM开始部分正在运行,但是我无法登录并执行脚本才能正常工作!

我不是一个高技能的开发人员,我甚至对于在Azure中的脚本语言之间进行选择也有疑问。

我们将不胜感激任何帮助。

谢谢, 汤姆

调用命令

Invoke-AzureRmVMRunCommand

Set-AzureRmVMCustomScriptExtension

New-SSHSession + Invoke-SSHCommand

取自例如画廊“ Connect-AzureVM”

1 个答案:

答案 0 :(得分:0)

参数-ScriptPath of Invoke-AzureRmVMRunCommand不应指向远程计算机中的路径,而应指向Runbook环境的本地路径。

如下所示的示例代码(在远程vm中创建一个名为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