針對 Runbook 問題進行疑難排解

此文章描述可能發生的 Runbook 問題及解決方法。 如需一般資訊,請參閱 Azure 自動化中的 Runbook 執行

Start-AzAutomationRunbook 失敗,並出現「runbookName 不符合預期模式」錯誤訊息

問題

當您執行 Start-AzAutomationRunbook 以啟動特定 Runbook 時:

start-azautomationRunbook -Name "Test_2" -AutomationAccountName "AutomationParent" -ResourceGroupName "AutomationAccount" 

其失敗並顯示下列錯誤:

Start-AzAutomationRunbook: "runbookname" does not match expected pattern '^[a-zA-Z]*-*[a-zA-Z0-9]*$'

原因

Az.Automation 模組 1.9.0 版中引進的程式碼會驗證要啟動之 Runbook 的名稱,並錯誤地將名稱中包含多個 “-” 字元或 “_” 字元的 Runbook 標示為無效。

因應措施

建議您還原至此模組的 1.8.0 版

解決方法

我們目前正努力部署修正以解決此問題。

診斷 Runbook 問題

當您在 Azure 自動化中執行 Runbook 期間收到錯誤時,您可以使用下列步驟來協助診斷問題:

  1. 確認您的 Runbook 指令碼可在本機電腦上順利執行。

    如需語言參考和學習課程模組,請參閱 PowerShell 文件Python 文件 \(英文\)。在本機執行您的指令碼,可以探索並解決常見錯誤,例如:

    • 遺失模組
    • 語法錯誤
    • 邏輯錯誤
  2. 調查 Runbook 錯誤資料流

    查看這些資料流中的特定訊息,並將其與此文章中記載的錯誤進行比較。

  3. 確認您的節點與自動化工作區具有必要模組。

    如果您的 Runbook 會匯入任何模組,請使用匯入模組中的步驟來確認這些模組可供您的自動化帳戶使用。 遵循更新 Azure 自動化中的 Azure PowerShell 模組中的指示,將您的 PowerShell 模組更新為最新版本。 如需更多疑難排解資訊,請參閱針對模組進行疑難排解

  4. 如果您的 Runbook 已暫止或非預期地失敗:

  5. 如果混合式 Runbook 背景工作角色上的 Runbook 作業或環境沒有回應,請執行此步驟。

    如果您正在混合式 Runbook 背景工作角色中而不是在 Azure 自動化中執行 Runbook,可能就需要針對混合式背景工作角色本身進行疑難排解

案例:無法在西歐區域建立新的自動化作業

問題

建立新的自動化作業時,作業建立可能會發生延遲或失敗。 將會自動淘汰已排程的工作,如果您看到失敗,可以淘汰透過入口網站執行的工作。

原因

這是因為客戶使用西歐區域自動化服務 Runbook 的負載很高。

解決方法

根據您的需求和環境執行下列可行的動作,以降低失敗的機率:

  • 如果您要使用整點建立 (12:00、1:00、2:00 等時間),通常在小時或半小時,我們建議您將作業開始時間移至小時/半小時前後的五分鐘。 這是因為多數客戶都會在整點開始執行作業,並會大幅增加服務負載,而其他時間位置的負載相對較少。

案例:Runbook 失敗並出現「this.Client.SubscriptionId cannot be null.」錯誤訊息

問題

您使用受控識別 Connect-AzAccount -Identity 的 Runbook 嘗試管理 Azure 物件,無法順利運作並記錄下列錯誤 - this.Client.SubscriptionId cannot be null.

get-azvm : 'this.Client.SubscriptionId' cannot be null. At line:5 char:1 + get-azvm + ~~~~~~~~ + CategoryInfo : CloseError: (:) [Get-AzVM], ValidationException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.GetAzureVMCommand

原因

當受控識別 (或 Runbook 中的其他帳戶) 未取得存取訂用帳戶的任何權限時,就會發生這種情況。

解決方法

為受控識別 (或 Runbook 中使用的其他帳戶) 授與訂用帳戶中適當的角色成員資格。 深入了解

 Screenshot that shows the assigning of Azure Role assignments.

Screenshot that shows how to add role assignment.

案例:無法存取 Azure 儲存體、Azure Key Vault 或 Azure SQL

此案例使用 Azure 儲存體作為範例;不過,此資訊同樣適用於 Azure Key VaultAzure SQL

問題

嘗試從 Runbook 存取 Azure 儲存體會導致類似下列訊息的錯誤:The remote server returned an error: (403) Forbidden. HTTP Status Code: 403 - HTTP Error Message: This request is not authorized to perform this operation.

原因

已啟用 Azure 儲存體上的 Azure 防火牆。

解決方法

Azure 儲存體Azure Key VaultAzure SQL 上啟用 Azure 防火牆,這會封鎖從 Azure 自動化 Runbook 存取這些服務。 即使啟用防火牆例外以允許受信任 Microsoft 服務時,存取也會遭到封鎖,因為自動化不是受信任服務清單的一部分。 啟用防火牆後,只能使用混合式 Runbook 背景工作角色和虛擬網路服務端點來進行存取。

案例:Runbook 因為「沒有權限」或「禁止 403」錯誤而失敗

問題

您的 Runbook 因為「沒有權限」或「禁止」403 錯誤或對等錯誤而失敗。

原因

執行身分帳戶對於 Azure 資源可能沒有與您目前自動化帳戶相同的權限。

解決方法

確定您的執行身分帳戶有權存取您指令碼中所使用的任何資源 \(部分機器翻譯\)。

案例:登入 Azure 帳戶失敗

問題

當您使用 Connect-AzAccount Cmdlet 時,會收到下列其中一個錯誤:

Unknown_user_type: Unknown User Type
No certificate was found in the certificate store with thumbprint

原因

如果認證資產名稱無效,就會發生這些錯誤。 如果您用來設定自動化認證資產的使用者名稱與密碼無效,可能也會發生這些錯誤。

解決方法

若要判斷發生錯誤的原因,請遵循下列步驟:

  1. 確定您不具任何特殊字元。 這些字元包括用來連線到 Azure 之自動化認證資產名稱中的 \@ 字元。

  2. 檢查以查看您是否可以使用儲存於本機 PowerShell ISE 編輯器之 Azure 自動化認證中的使用者名稱與密碼。 在 PowerShell ISE 中,執行下列 Cmdlet。

    $Cred = Get-Credential
    #Using Azure Service Management
    Add-AzureAccount -Credential $Cred
    #Using Azure Resource Manager
    Connect-AzAccount -Credential $Cred
    
  3. 如果您的驗證在本機失敗,表示您尚未正確設定 Microsoft Entra 認證。 若要正確設定 Microsoft Entra 帳戶,請參閱文章:使用 Microsoft Entra ID 向 Azure 進行驗證。

  4. 如果此錯誤似乎是暫時性的,請嘗試將重試邏輯新增至您的驗證常式,讓驗證變得更強固。

    $logonAttempt = 0
    $logonResult = $False
    
    while(!($connectionResult) -And ($logonAttempt -le 10))
    {
        $LogonAttempt++
        #Logging in to Azure...
        $connectionResult = Connect-AzAccount `
        Start-Sleep -Seconds 30
        if($connectionResult)
        {
           $logonResult = $True 
        }
    }
    

案例:執行 Login-AzureRmAccount 進行登入

問題

當您執行 Runbook 時,收到下列錯誤:

Run Login-AzureRMAccount to login.

原因

如果您未使用執行身分帳戶,或執行身分帳戶已過期,則可能會發生此錯誤。

此錯誤有兩個主要原因:

  • 有不同版本的 AzureRM 或 Az 模組。
  • 您正嘗試存取不同訂用帳戶中的資源。

解決方法

如果您在更新一個 AzureRM 或 Az 模組之後收到此錯誤,則需將您的所有模組更新為相同版本。

如果您嘗試存取另一個訂用帳戶中的資源,請遵循下列步驟以設定權限:

  1. 移至自動化執行身分帳戶,然後複製應用程式識別碼指紋

    Copy Application ID and Thumbprint

  2. 移至訂用帳戶的存取控制,自動化帳戶「不會」裝載於其中,並新增角色指派。

    Access control

  3. 新增先前收集到的應用程式識別碼。 選取 [參與者] 權限。

    Add role assignment

  4. 複製訂用帳戶的名稱。

  5. 您現在可以使用下列 Runbook 程式碼,來測試您的自動化帳戶對另一個訂用帳戶的權限。 將 <CertificateThumbprint> 取代為在步驟 1 中複製的值。 將 "<SubscriptionName>" 取代為在步驟 4 中複製的值。

    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint "<CertificateThumbprint>"
    #Select the subscription you want to work with
    Select-AzSubscription -SubscriptionName '<YourSubscriptionNameGoesHere>'
    
    #Test and get outputs of the subscriptions you granted access.
    $subscriptions = Get-AzSubscription
    foreach($subscription in $subscriptions)
    {
        Set-AzContext $subscription
        Write-Output $subscription.Name
    }
    

案例:找不到 Azure 訂用帳戶

問題

您在使用 Select-AzureSubscriptionSelect-AzureRMSubscriptionSelect-AzSubscription Cmdlet 時,收到下列錯誤:

The subscription named <subscription name> cannot be found.

錯誤

此錯誤可能會在下列情況中發生:

  • 訂用帳戶名稱無效。
  • 不會將嘗試取得訂用帳戶詳細資料的 Microsoft Entra 使用者設定為訂用帳戶的管理員。
  • 無法使用此 Cmdlet。
  • 發生環境切換。

解決方法

如需環境切換,請參閱環境切換 Azure 自動化

案例:Runbook 在處理多個子訂用帳戶時發生失敗

問題

執行 Runbook 時,此 Runbook 無法管理 Azure 資源。

原因

Runbook 在執行時未使用正確的內容。 這可能是因為 Runbook 不小心嘗試存取錯誤的訂用帳戶。

您可能會看到這種錯誤:

Get-AzVM : The client '<client-id>' with object id '<object-id> does not have authorization to perform action 'Microsoft.Compute/virtualMachines/read' over scope '/subscriptions/<subcriptionIdOfSubscriptionWichDoesntContainTheVM>/resourceGroups/REsourceGroupName/providers/Microsoft.Compute/virtualMachines/VMName '.
   ErrorCode: AuthorizationFailed
   StatusCode: 403
   ReasonPhrase: Forbidden Operation
   ID : <AGuidRepresentingTheOperation> At line:51 char:7 + $vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $UNBV... +

或是這種:

Get-AzureRmResource : Resource group "SomeResourceGroupName" could not be found.
... resources = Get-AzResource -ResourceGroupName $group.ResourceGro ...
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzResource], CloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResourceCmdlet

解決方法

若要避免不小心嘗試存取錯誤的訂用帳戶,請參閱 Azure 自動化中的環境切換

案例:向 Azure 進行的驗證因為已啟用多重要素驗證而失敗

問題

當使用您的 Azure 使用者名稱和密碼向 Azure 進行驗證時,會收到下列錯誤:

Add-AzureAccount: AADSTS50079: Strong authentication enrollment (proof-up) is required

原因

如果對 Azure 帳戶使用多重要素驗證,您就無法使用 Microsoft Entra 使用者來向 Azure 進行驗證。 您需要改為使用憑證或服務主體來驗證。

解決方法

若要搭配 Azure Resource Manager Cmdlet 使用服務主體,請參閱使用 Azure 入口網站來建立服務主體使用 Azure Resource Manager 來驗證服務主體

案例:Runbook 失敗並出現「工作已取消」錯誤訊息

問題

您的 Runbook 失敗,並具有類似下列範例的錯誤:

Exception: A task was cancelled.

原因

此錯誤可能是因為使用過期的 Azure 模組所造成。

解決方法

您可以藉由將 Azure 模組更新為最新版本來解決此錯誤:

  1. 在您的自動化帳戶中,選取 [模組],然後選取 [更新 Azure 模組]。
  2. 更新大約需要 15 分鐘。 完成後,重新執行失敗的 Runbook。

若要深入了解如何更新模組,請參閱<更新 Azure 自動化中的 Azure 模組>

案例:無法將字詞辨識為 Cmdlet、函式或指令碼的名稱

問題

您的 Runbook 失敗,並具有類似下列範例的錯誤:

The term 'Connect-AzAccount' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if the path was included verify that the path is correct and try again.

原因

此錯誤的發生原因如下:

  • 未將包含 Cmdlet 的模組匯入到自動化帳戶。
  • 已匯入包含 Cmdlet 的模組,但該模組已過期。

解決方法

執行下列其中一個工作來解決此錯誤:

案例:Cmdlet 在 Azure 自動化的 PnP PowerShell Runbook 中失敗

問題

當 Runbook 將 PnP PowerShell 產生的物件直接寫入至 Azure Automation 輸出時,Cmdlet 輸出無法串流回 Automation。

原因

此問題最常發生在 Azure 自動化處理會叫用 PnP PowerShell Cmdlet (例如 add-pnplistitem) 的 Runbook,而不會攔截傳回物件。

解決方法

編輯您的指令碼,以將任何傳回值指派給變數,讓 Cmdlet 不會嘗試將整個物件寫入至標準輸出。 指令碼可以將輸出資料流重新導向至 Cmdlet,如下所示。

  $null = add-pnplistitem

如果您的指令碼剖析 Cmdlet 輸出,則指令碼必須將輸出儲存在變數中並操作變數,而不只是串流該輸出。

$SomeVariable = add-pnplistitem ....
if ($SomeVariable.someproperty -eq ....

案例:執行 Runbook 時,無法辨識 Cmdlet

問題

您的 Runbook 作業失敗,錯誤為:

<cmdlet name>: The term <cmdlet name> is not recognized as the name of a cmdlet, function, script file, or operable program.

原因

當 PowerShell 引擎找不到您在 Runbook 中使用的 Cmdlet 時,就會發生此錯誤。 這可能是因為帳戶中沒有包含該 Cmdlet 的模組、與 Runbook 名稱發生名稱衝突,或該 Cmdlet 也存在於另一個模組中,而且自動化無法解析名稱。

解決方法

使用下列任一個解決方案來修正問題:

  • 確定您已正確輸入 Cmdlet 名稱。
  • 確認 Cmdlet 存在於您的自動化帳戶中且沒有發生衝突。 若要確認 Cmdlet 是否存在,請以編輯模式開啟 Runbook,然後搜尋您想要在程式庫中尋找的 Cmdlet,或執行 Get-Command <CommandName>。 在驗證 Cmdlet 可供帳戶使用,且未與其他 Cmdlet 或 Runbook 發生名稱衝突之後,將該 Cmdlet 新增至畫布。 請確定您正在 Runbook 中使用有效的參數集。
  • 如果發生名稱衝突且 Cmdlet 可在兩個不同的模組中使用,則可使用 Cmdlet 的完整名稱來解決此問題。 例如,您可以使用 ModuleName\CmdletName
  • 如果您是在混合式背景工作角色群組中以內部部署方式執行 Runbook,則需確認模組和 Cmdlet 均安裝於裝載混合式背景工作角色的機器上。

案例:呼叫 Add-AzAccount 時物件參考不正確

問題

當您使用 Add-AzAccount (即 Connect-AzAccount Cmdlet 的別名) 時,收到此錯誤:

Add-AzAccount : Object reference not set to an instance of an object

原因

如果 Runbook 在呼叫 Add-AzAccount 以新增自動化帳戶之前並未執行適當的步驟,就會發生此錯誤。 必要步驟的範例之一就是使用執行身分帳戶進行登入。 如需在 Runbook 中使用的正確作業,請參閱 Azure 自動化中的 Runbook 執行 \(部分機器翻譯\)。

案例:未將物件參考設定為物件的執行個體

問題

您會在搭配 Wait 參數叫用子 Runbook,且輸出資料流包含物件時,收到下列錯誤:

Object reference not set to an instance of an object

原因

如果資料流包含物件,Start-AzAutomationRunbook 就不會正確處理輸出資料流。

解決方法

實作輪詢邏輯,並使用 Get-AzAutomationJobOutput \(英文\) Cmdlet 來擷取輸出。 這裡定義了此邏輯的範例:

$AutomationAccountName = "ContosoAutomationAccount"
$RunbookName = "ChildRunbookExample"
$ResourceGroupName = "ContosoRG"

function IsJobTerminalState([string]$Status) {
  $TerminalStates = @("Completed", "Failed", "Stopped", "Suspended")
  return $Status -in $TerminalStates
}

$StartAzAutomationRunbookParameters = @{
  Name = $RunbookName
  AutomationAccountName = $AutomationAccountName
  ResourceGroupName = $ResourceGroupName
}
$Job = Start-AzAutomationRunbook @StartAzAutomationRunBookParameters
$PollingSeconds = 5
$MaxTimeout = New-TimeSpan -Hours 3 | Select-Object -ExpandProperty TotalSeconds
$WaitTime = 0
while(-NOT (IsJobTerminalState $Job.Status) -and $WaitTime -lt $MaxTimeout) {
   Start-Sleep -Seconds $PollingSeconds
   $WaitTime += $PollingSeconds
   $Job = $Job | Get-AzAutomationJob
}

$Job | Get-AzAutomationJobOutput | Get-AzAutomationJobOutputRecord | Select-Object -ExpandProperty Value

案例:Runbook 因還原序列化物件而失敗

問題

您的 Runbook 失敗,錯誤為:

Cannot bind parameter <ParameterName>.

Cannot convert the <ParameterType> value of type Deserialized <ParameterType> to type <ParameterType>.

原因

如果您的 Runbook 是「PowerShell 工作流程」,它會以還原序列化格式儲存複雜物件,以在暫止工作流程時保存 Runbook 狀態。

解決方法

使用下列任一個解決方案來修正此問題:

  • 如果您要透過管線將複雜物件從一個 Cmdlet 傳送到另一個,則需將這些 Cmdlet 包裝於 InlineScript 活動中。
  • 從複雜物件傳遞您需要的名稱或值,而非傳遞整個物件。
  • 使用 PowerShell Runbook,而不是 PowerShell 工作流程 Runbook。

案例:呼叫 Webhook 時出現「400 不正確的要求」狀態

問題

當您嘗試叫用 Azure 自動化 Runbook 的 Webhook 時,收到下列錯誤:

400 Bad Request : This webhook has expired or is disabled

原因

您嘗試呼叫的 Webhook 已停用,或已過期。

解決方法

如果 Webhook 已停用,您可以透過 Azure 入口網站重新啟用。 如果 Webhook 已過期,則您必須先刪除後再重新建立。 只有當 Webhook 尚未過期時,您才能續訂 Webhook

案例:429:目前的要求率太大

問題

您在執行 Get-AzAutomationJobOutput Cmdlet 時出現下列錯誤訊息:

429: The request rate is currently too large. Please try again

原因

從具備許多詳細資訊資料流的 Runbook 中擷取作業輸出時,可能就會發生此錯誤。

解決方法

執行下列其中一個動作來解決此錯誤:

  • 編輯 Runbook,並減少其所發出的作業資料流數目。
  • 減少在執行 Cmdlet 時所要擷取的資料流數目。 若要這樣做,您可以設定 Get-AzAutomationJobOutput \(英文\) Cmdlet 的 Stream 參數值,以便僅擷取輸出資料流。 ​

案例:Runbook 作業因為超過配置的配額而失敗

問題

您的 Runbook 作業失敗,錯誤為:

The quota for the monthly total job run time has been reached for this subscription

原因

當作業執行超過您的帳戶的 500 分鐘免費配額時,會發生此錯誤。 這個配額會套用至所有類型的作業執行工作。 這其中的部分工作是測試作業、從入口網站中啟動作業、使用 Webhook 執行作業,或者使用 Azure 入口網站或您的資料中心排程要執行的作業。 若要深入了解自動化的價格,請參閱自動化價格

解決方法

如果您每個月都想要使用超過 500 分鐘的處理時間,請將您的訂用帳戶從免費層變更為基本層:

  1. 登入 Azure 訂用帳戶。
  2. 選取要升級的自動化帳戶。
  3. 選取 [設定],然後選取 [定價]
  4. 選取頁面底部的 [啟用],以將您的帳戶升級至基本層。

案例:Runbook 輸出資料流大於 1 MB

問題

在 Azure 沙箱中執行的 Runbook 發生下列錯誤而失敗:

The runbook job failed due to a job stream being larger than 1MB, this is the limit supported by an Azure Automation sandbox.

原因

發生此錯誤的原因是您的 Runbook 已嘗試將太多例外狀況資料寫入至輸出資料流。

解決方法

作業輸出資料流的限制為 1 MB。 確定您的 Runbook 會使用 trycatch 區塊,來括住對可執行檔或子處理序的呼叫。 如果作業擲回例外狀況,則讓程式碼將來自例外狀況的訊息寫入到自動化變數中。 此技術可避免將訊息寫入到作業輸出資料流。 針對已執行的混合式 Runbook 背景工作角色工作,截斷為 1 MB 的輸出資料流不會顯示錯誤訊息。

案例:已嘗試啟動 Runbook 作業三次,但無法每次都順利啟動

問題

您的 Runbook 失敗,並發生下列錯誤:

The job was tried three times but it failed

原因

此錯誤是因為下列其中一個問題而引發:

  • 記憶體限制。 作業若使用超過 400 MB 的記憶體,可能就會失敗。 配置給沙箱的記憶體限制記載於自動化服務限制中。

  • 網路通訊端。 Azure 沙箱會限制為 1,000 個並行網路通訊端。 如需詳細資訊,請參閱自動化服務限制

  • 模組不相容。 模組相依性可能不正確。 在此案例中,您的 Runbook 通常會傳回 Command not foundCannot bind parameter 訊息。

  • 未針對沙箱向 Active Directory 進行驗證。 您的 Runbook 已嘗試呼叫在 Azure 沙箱中執行的可執行檔或子處理序。 不支援使用 Azure Active Directory 驗證程式庫 (ADAL),設定 Runbook 以向 Microsoft Entra ID 進行驗證。

解決方法

  • 記憶體限制,網路通訊端。 建議在記憶體限制內運作的方式是,在多個 Runbook 之間分割工作負載、不要在記憶體中處理太多資料、避免寫入來自您 Runbook 的不必要輸出,以及考慮寫入至您 PowerShell 工作流程 Runbook 的檢查點數目。 使用 clear 方法 (例如 $myVar.clear) 來清除變數,並使用 [GC]::Collect 立即執行記憶體回收。 這些動作會減少 Runbook 在執行階段的記憶體使用量。

  • 模組不相容。 遵循如何更新 Azure 自動化中的 Azure PowerShell 模組步驟來更新 Azure 模組。

  • 未針對沙箱向 Active Directory 進行驗證。 當您使用 Runbook 以向 Microsoft Entra ID 進行驗證時,確認您的自動化帳戶中有可用的 Azure AD 模組。 請務必為執行身分帳戶授與必要權限,以執行 Runbook 自動化的工作。

    如果您的 Runbook 無法呼叫在 Azure 沙箱中執行的可執行檔或子處理序,則需在混合式 Runbook 背景工作角色上使用 Runbook。 混合式背景工作角色不會受限於 Azure 沙箱所受到的記憶體和網路限制。

案例:PowerShell 作業失敗且出現「無法叫用方法」錯誤訊息

問題

當您在 Azure 內執行的 Runbook 中啟動 PowerShell 作業時,收到下列錯誤訊息:

Exception was thrown - Cannot invoke method. Method invocation is supported only on core types in this language mode.

原因

此錯誤可能表示在 Azure 沙箱中執行的 Runbook 無法以完整語言模式執行。

解決方法

有兩種方法可以解決此錯誤:

  • 不使用 Start-Job \(英文\),而是改為使用 Start-AzAutomationRunbook \(英文\) 來啟動 Runbook。
  • 嘗試在混合式 Runbook 背景工作角色上執行 Runbook。

若要深入了解此行為和 Azure 自動化 Runbook 的其他行為,請參閱 Azure 自動化中的 Runbook 執行

案例:長時間執行的 Runbook 無法完成

問題

您的 Runbook 在執行三小時之後顯示為「已停止」狀態。 您可能也會收到此錯誤:

The job was evicted and subsequently reached a Stopped state. The job cannot continue running.

這是 Azure 沙箱中故意設計的行為,原因是 Azure 自動化中會進行處理序的公平共用監視。 如果某個處理序執行時間超過三小時,公平共用就會自動停止 Runbook。 超過公平共用時間限制的 Runbook 狀態會依 Runbook 類型而有所不同。 PowerShell 和 Python Runbook 均設定為「已停止」狀態。 PowerShell 工作流程 Runbook 會設定為「失敗」狀態。

原因

Runbook 的執行時間已超過 Azure 沙箱中公平共用所允許的三小時限制。

解決方法

其中一個建議的解決方案是在混合式 Runbook 背景工作角色上執行 Runbook。 混合式背景工作角色不會受限於 Azure 沙箱所受到的三小時公平共用 Runbook 限制。 開發在混合式 Runbook 背景工作角色上執行的 Runbook 時,應使其支援重新啟動行為,以免發生非預期的本機基礎結構問題。

另一個解決方案是藉由建立子 Runbook 來將 Runbook 最佳化。 例如,如果您的 Runbook 會在數個資料庫上的某個資料庫作業中,針對數個資源重複執行同一個函式,則您可以將該函式移到子 Runbook。 每個子 Runbook 都會在個別處理序中平行執行。 此行為可減少完成父代 Runbook 的時間總計。

啟用子 Runbook 案例的 PowerShell Cmdlet 是:

  • Start-AzAutomationRunbook \(英文\)。 此 Cmdlet 可讓您啟動 Runbook,並將參數傳遞給 Runbook。
  • Get-AzAutomationJob \(英文\)。 如果有需要在子 Runbook 完成後執行的作業,此 Cmdlet 可讓您檢查每個子項的作業狀態。

案例:作業資料流中有關 get_SerializationSettings 方法的錯誤

問題

您在 Runbook 的作業資料流中看到下列錯誤:

Connect-AzAccount : Method 'get_SerializationSettings' in type
'Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient' from assembly
'Microsoft.Azure.Commands.ResourceManager.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
does not have an implementation.
At line:16 char:1
+ Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -Appl ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Connect-AzAccount], TypeLoadException
    + FullyQualifiedErrorId : System.TypeLoadException,Microsoft.Azure.Commands.Profile.ConnectAzAccountCommand

原因

此錯誤可能是因為在 Runbook 中,使用從 AzureRM 到 Az 模組的不完整移轉所造成。 此情況可能導致 Azure 自動化只使用 AzureRM 模組來啟動 Runbook 作業,接著只使用 Az 模組來啟動另一個作業,而這會導致沙箱損毀。

解決方法

我們不建議在同一個 Runbook 中使用 Az 和 AzureRM Cmdlet。 若要深入了解模組的正確用法,請參閱移轉至 Az 模組

案例:使用適用於 Runbook 或應用程式的 Azure 沙箱時存取遭拒

問題

當您的 Runbook 或應用程式嘗試在 Azure 沙箱中執行時,環境會拒絕存取。

原因

此問題可能會發生,因為 Azure 沙箱會防止存取所有跨處理序 COM 伺服器。 例如,沙箱化的應用程式或 Runbook 無法呼叫 Windows Management Instrumentation (WMI) 或 Windows Installer 服務 (msiserver.exe)。

解決方法

如需使用 Azure 沙箱的詳細資訊,請參閱 Runbook 執行環境

案例:在 Runbook 中使用 Key Vault 時,「禁止」狀態碼無效

問題

當您嘗試透過 Azure 自動化 Runbook 存取 Azure Key Vault 時,收到下列錯誤:

Operation returned an invalid status code 'Forbidden'

原因

發生此問題的可能原因如下:

  • 未使用執行身分帳戶。
  • 權限不足。

解決方法

未使用執行身分帳戶

遵循步驟 5 - 加入驗證來管理 Azure 資源,以確保您會使用執行身分帳戶來存取 Key Vault。

權限不足

將權限新增至 Key Vault,以確保執行身分帳戶具有足夠的權限可存取 Key Vault。

案例:Runbook 失敗,出現「超過參數長度」錯誤

問題

您的 Runbook 使用參數並失敗,發生下列錯誤:

Total Length of Runbook Parameter names and values exceeds the limit of 30,000 characters. To avoid this issue, use Automation Variables to pass values to runbook.

原因

在 Python 2.7、Python 3.8 和 PowerShell 7.1 Runbook 中可提供的所有參數的字元長度總計有限制。 所有參數名稱的長度以及且參數值的總計不能超過 30,000 個字元。

解決方法

若要克服此問題,您可以使用 Azure 自動化變數,將值傳遞至 Runbook。 您也可以減少參數名稱和參數值中的字元數,以確保總長度不超過 30,000 個字元。

下一步

如果您在這裡看不到您的問題,或者無法解決您的問題,請嘗試下列其中一個管道以取得更多支援:

  • 透過 Azure 論壇獲得由 Azure 專家所提供的解答。
  • 連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 Azure 支援會讓您與 Azure 社群聯繫,以獲得解答、支援及專家。
  • 如果需要更多協助,您可以提出 Azure 支援事件。 請移至 Azure 支援網站,然後選取 [取得支援]