Runbooks secundarios en Service Management AutomationChild Runbooks in Service Management Automation

Se aplica a: Paquete de Windows Azure para Windows Server, System Center 2016 - Service Management AutomationApplies To: Windows Azure Pack for Windows Server, System Center 2016 - Service Management Automation

Es un procedimiento recomendado en Service Management Automation escribir runbooks reutilizables, modulares, con una función independiente que se puede usar por otros runbooks.It is a best practice in Service Management Automation to write reusable, modular runbooks with a discrete function that can be used by other runbooks. Normalmente, un runbook primario llamará a uno o varios runbooks secundarios para llevar a cabo la función requerida.A parent runbook will often call one or more child runbooks to perform required functionality. Hay dos maneras de llamar a un runbook secundario, y cada una presenta diferencias que debe conocer para poder determinar cuál es la mejor para los diferentes escenarios.There are two ways to call a child runbook, and each has distinct differences that you should understand so that you can determine which will be best for your different scenarios.

Invocar un Runbook secundario con la ejecución en líneaInvoking a Child Runbook Using Inline Execution

Para invocar un runbook insertado desde otro runbook, utilice el nombre del runbook y proporcione los valores de sus parámetros exactamente igual que haría con una actividad o un cmdlet.To invoke a runbook inline from another runbook, you use the name of the runbook and provide values for its parameters exactly like you would use an activity or cmdlet. Todos los runbooks en el mismo entorno de automatización de la administración de servicio están disponibles para todos los demás los usen de esta manera.All runbooks in the same Service Management Automation environment are available to all others to be used in this manner. El runbook primario esperará a que el runbook secundario se complete antes de pasar a la siguiente línea, y la salida se devuelve directamente al primario.The parent runbook will wait for the child runbook to complete before moving to the next line, and any output is returned directly to the parent.

Al invocar un runbook insertado, se ejecuta en el mismo trabajo que el runbook primario.When you invoke a runbook inline, it runs in the same job as the parent runbook. En el historial de trabajos del runbook secundario no habrá ninguna indicación de que se ejecutó.There will be no indication in the job history of the child runbook that it ran. Las excepciones y las salidas de los flujos del runbook secundario se asociarán con el primario.Any exceptions and any stream output from the child runbook will be associated with the parent. Esto da como resultado menos trabajos y facilita el seguimiento y solucionar problemas desde cualquier excepción producida por el runbook secundario y cualquiera de su salida de flujo están asociado con el runbook primario "trabajo s.This results in fewer jobs and makes them easier to track and to troubleshoot since any exceptions thrown by the child runbook and any of its stream output are associated with the parent runbook"s job.

Cuando se publica un runbook, los runbooks secundarios a los que llama deben tener ya una versión publicada.When a runbook is published, any child runbooks that it calls must already have a published version. Esto es porque automatización crea una asociación con los runbooks secundarios cuando se compila un runbook.This is because Automation builds an association with any child runbooks when a runbook is compiled. Si se "t, el runbook primario parecerá que se publica correctamente, sólo podrán generará una excepción cuando se" s iniciado.If they aren"t, the parent runbook will appear to publish properly, it but will generate an exception when it"s started. Si esto ocurre, puede volver a publicar el runbook primario para hacer referencia correctamente a los runbooks secundarios.If this happens, you can republish the parent runbook in order to properly reference the child runbooks. No es necesario volver a publicar el runbook primario si se cambia alguno de los runbooks secundarios porque ya se habrá creado la asociación.You do not need to republish the parent runbook if any of the child runbooks are changed because the association will have already been created.

Los parámetros de un runbook secundario llamado en línea pueden ser cualquier tipo de datos, incluidos objetos complejos y no hay ningún serialización JSON como cuando se inicia el runbook mediante el Portal de administración o con el Start-SmaRunbook cmdlet.The parameters of a child runbook called inline can be any data type including complex objects, and there is no JSON serialization as there is when you start the runbook using the Management Portal or with the Start-SmaRunbook cmdlet.

Tipos de runbookRunbook types

Un runbook solo puede usar otro runbook de la misma tipo como un runbook secundario con la ejecución en línea.A runbook can only use another runbook of the same type as a child runbook using inline execution. Esto significa que un runbook de flujo de trabajo de PowerShell no se puede usar un PowerShell runbook como elemento secundario mediante la ejecución de en línea y un PowerShell runbook no puede usar un runbook de flujo de trabajo de PowerShell.This means that a PowerShell Workflow runbook cannot use a PowerShell runbook as a child using inline execution, and a PowerShell runbook cannot use a PowerShell Workflow runbook.

Cuando se llama a un runbook secundario de flujo de trabajo de PowerShell con una ejecución en línea, que usar el nombre del runbook.When you call a PowerShell Workflow child runbook using inline execution, you just use the name of the runbook. Cuando se llama a un runbook secundario de PowerShell, debe precedido a su nombre .\ para especificar que el script se encuentra en el directorio local.When you call a PowerShell child runbook, you must preceded its name with .\ to specify that the script is located in the local directory.

EjemploExample

En el ejemplo siguiente se invoca un runbook secundario de prueba que acepta tres parámetros: un objeto complejo, un entero y un valor booleano.The following example invokes a test child runbook that accepts three parameters, a complex object, an integer, and a boolean. La salida del runbook secundario se asigna a una variable.The output of the child runbook is assigned to a variable. En este caso, el runbook secundario es un runbook de flujo de trabajo de PowerShellIn this case, the child runbook is a PowerShell Workflow runbook

$vm = Get-VM "Name "MyVM" "ComputerName "MyServer"
$output = Test-ChildRunbook "VM $vm "RepeatCount 2 "Restart $true

Aquí te mostramos el mismo ejemplo con un runbook de script de PowerShell como elemento secundario.Following is the same example using a PowerShell script runbook as the child.

$vm = Get-VM "Name "MyVM" "ComputerName "MyServer"
$output = .\Test-ChildRunbook.ps1 "VM $vm "RepeatCount 2 "Restart $true

A partir de un Runbook secundario con el CmdletStarting a Child Runbook Using Cmdlet

Puede usar el Start-SMARunbook para iniciar un runbook tal como se describe en para iniciar un runbook con Windows PowerShell.You can use the Start-SMARunbook cmdlet to start a runbook as described in To start a runbook with Windows PowerShell. Cuando se inicia un runbook secundario desde un cmdlet, el runbook primario pasará a la siguiente línea en cuanto se cree el trabajo para el runbook secundario.When you start a child runbook from a cmdlet, the parent runbook will move to the next line as soon as the job is created for the child runbook. Si necesita recuperar todas las salidas del runbook, debe acceder al trabajo mediante Get SMAJobOutput.If you need to retrieve any output from the runbook, then you need to access the job using Get-SMAJobOutput.

El trabajo de un runbook secundario iniciado con un cmdlet se ejecutará en un trabajo diferente del runbook primario.The job from a child runbook started with a cmdlet will run in a separate job from the parent runbook. El resultado es que aumenta el número de trabajos que invocan el flujo de trabajo en línea, aumenta la carga en el servidor Worker y se dificulta el seguimiento.This results in more jobs than invoking the workflow inline, increasing overhead on the worker server, and making them more difficult to track. Sin embargo, el elemento primario puede iniciar varios runbooks secundarios sin tener que esperar a que se completen.The parent can start multiple child runbooks though without waiting for each to complete. Para ese mismo tipo de ejecución en paralelo con llamadas en línea a los runbooks secundarios, el runbook primario tendría que usar la palabra clave parallel.For that same kind of parallel execution calling the child runbooks inline, the parent runbook would need to use the parallel keyword.

Los parámetros para un runbook secundario iniciado con un cmdlet se proporcionan como una tabla hash como se describe en parámetros del Runbook.Parameters for a child runbook started with a cmdlet are provided as a hashtable as described in Runbook Parameters. Pueden usarse solo los tipos de datos simples, aunque puede proporcionar el nombre de un recurso de credencial tal y como se describe en credenciales.Only simple data types can be used, although you can provide the name of a credential asset as described in Credentials. Si el runbook tiene un parámetro con un tipo de datos complejo, debe llamarse en línea.If the runbook has a parameter with a complex data type, then it must be called inline.

En el ejemplo siguiente se inicia un runbook secundario con parámetros y se espera a que finalice.The following example starts a child runbook with parameters and then waits for it to complete. Una vez completado, el runbook primario recopila la salida del trabajo.Once completed, its output is collected from the job by the parent runbook.

$webServer = 'https://MyServer'
$port = 9090
$runbookName = "Test-Runbook"
$params = @{"VMName"="MyVM";"RepeatCount"=2;"Restart"=$true}

$job = Start-SmaRunbook "WebServiceEndpoint $webServer "Port $port "Name $runbookName "Parameters $params

$doLoop = $true
While ($doLoop) {
   $job = Get-SmaJob "WebServiceEndpoint $webServer "Port $port -Id $job.Id
   $status = $job.Status
   $doLoop = (($status -ne "Completed") -and ($status -ne "Failed") -and ($status -ne "Suspended") -and ($status -ne "Stopped")
}

Get-SmaJobOutput "WebServiceEndpoint $webServer "Port $port -Id $job.Id "Stream Output

Comparación de métodos para llamar a un runbook secundarioComparison of Methods for Calling a Child Runbook

En la tabla siguiente se resumen las diferencias entre los dos métodos para llamar a un runbook desde otro runbook.The following table summarizes the differences between the two methods for calling a runbook from another runbook.

En líneaInline CmdletCmdlet
TrabajoJob Los runbooks secundarios se ejecutan en el mismo trabajo que el primario.Child runbooks run in the same job as the parent. Se crea un trabajo independiente para el runbook secundario.A separate job is created for the child runbook.
EjecuciónExecution El runbook primario espera a que el runbook secundario se complete antes de continuar.Parent runbook waits for the child runbook to complete before continuing. El runbook primario continúa inmediatamente después de que el runbook secundario se inicie.Parent runbook continues immediately after child runbook is started.
SalidaOutput El runbook primario puede obtener la salida directamente del runbook secundario.Parent runbook can directly get output from child runbook. El runbook primario debe recuperar la salida del trabajo del runbook secundario.Parent runbook must retrieve output from child runbook job.
ParámetrosParameters Los valores de los parámetros del runbook secundario se especifican por separado y pueden utilizar cualquier tipo de datos.Values for the child runbook parameters are specified separately and can use any data type. Los valores de los parámetros del runbook secundario deben combinarse en una sola tabla hash y solo pueden incluir tipos de datos simples, de matriz y de objeto que utilicen la serialización de JSON.Values for the child runbook parameters must be combined into a single hashtable and can only include simple, array, and object data types that leverage JSON serialization.
PublicaciónPublishing El runbook secundario debe publicarse antes de que se publique el runbook primario.Child runbook must be published before parent runbook is published. El runbook secundario debe publicarse antes de que se inicie el runbook primario.Child runbook must be published any time before parent runbook is started.

Véase tambiénSee Also

Para iniciar un runbook con Windows PowerShellTo start a runbook with Windows PowerShell

Creación de runbooks de AutomationAuthoring Automation Runbooks

Automation RunbooksAutomation Runbooks

Tipos de runbookRunbook types