将 JSON 对象传递到 Azure 自动化 Runbook

它可用于存储想要传递到 JSON 文件中的 Runbook 的数据。 例如,你可能会创建包含所有想要传递给 Runbook 的参数的 JSON 文件。 为此,必须先将 JSON 转换为字符串,将字符串转换为 PowerShell 对象,然后再将其内容传递到 Runbook。

在此示例中,将创建一个调用 Start-AzureRmAutomationRunbook 的 PowerShell 脚本来启动 PowerShell Runbook,将 JSON 的内容传递给 Runbook。 PowerShell Runbook 会启动一个 Azure VM,从传入的 JSON 获取 VM 的参数。

先决条件

要完成本教程,需要以下各项:

  • Azure 订阅。 如果没有 Azure 订阅,可在开始之前创建一个 1 元试用帐户。
  • 自动化帐户,用来保存 Runbook 以及向 Azure 资源进行身份验证。 此帐户必须有权启动和停止虚拟机。
  • Azure 虚拟机。 我们需停止和启动该虚拟机,因此其不应为生产用 VM。
  • 在本地计算机上安装的 Azure Powershell。 若要详细了解如何获得 Azure PowerShell,请参阅 Install and configure Azure Powershell(安装和配置 Azure PowerShell)。

创建 JSON 文件

在文本文件中键入以下测试,并在本地计算机上将其保存为 test.json

{
   "VmName" : "TestVM",
   "ResourceGroup" : "AzureAutomationTest"
}

创建 Runbook

在 Azure 自动化中创建名为“Test-Json”的新 PowerShell Runbook。 若要了解如何创建新的 PowerShell Runbook,请参阅我的第一个 PowerShell Runbook

要接受 JSON 数据,Runbook 必须将一个对象作为输入参数。

然后,Runbook 可以使用 JSON 中定义的属性。

Param(
     [parameter(Mandatory=$true)]
     [object]$json
)

# Connect to Azure account   
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID `
    -ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint -EnvironmentName "AzureChinaCloud"

# Convert object to actual JSON
$json = $json | ConvertFrom-Json

# Use the values from the JSON object as the parameters for your command
Start-AzureRmVM -Name $json.VMName -ResourceGroupName $json.ResourceGroup

在自动化帐户中保存并发布此 Runbook。

通过 PowerShell 调用 Runbook

现在可以通过 Azure PowerShell 从本地计算机调用 Runbook。 运行以下 PowerShell 命令:

  1. 登录到 Azure: powershell Login-AzureRmAccount 系统会提示输入 Azure 凭据。
  2. 获取 JSON 文件的内容并将其转换为字符串: powershell $json = (Get-content -path 'JsonPath\test.json' -Raw) | Out-string JsonPath 是保存 JSON 文件的位置路径。
  3. $json 的字符串内容转换为 PowerShell 对象: powershell $JsonParams = @{"json"=$json}
  4. Start-AzureRmAutomationRunbook 的参数创建哈希表: powershell $RBParams = @{ AutomationAccountName = 'AATest' ResourceGroupName = 'RGTest' Name = 'Test-Json' Parameters = $JsonParams } 请注意,你正在将 Parameters 的值设置为包含 JSON 文件中的值的 PowerShell 对象。
  5. 启动 Runbook powershell $job = Start-AzureRmAutomationRunbook @RBParams

Runbook 将使用 JSON 文件中的值来启动 VM。

后续步骤