Conceitos de Fluxo de Trabalho do Windows PowerShell

Importante

Esta versão do Service Management Automation (SMA) chegou ao fim do suporte. Recomendamos que atualize para o SMA 2022.

Um tipo de runbook para o Service Management Automation baseia-se no Windows PowerShell Fluxos de Trabalho. Este artigo fornece uma breve descrição geral das funcionalidades críticas dos fluxos de trabalho comuns aos runbooks de Automatização. Os detalhes completos sobre os fluxos de trabalho estão disponíveis no Introdução com Windows PowerShell Fluxo de Trabalho.

A estrutura do runbook é idêntica entre runbooks para o Service Management Automation e para o Microsoft Automatização do Azure embora os dois funcionem normalmente com recursos diferentes.

Fluxos de Trabalho do Windows PowerShell

Um fluxo de trabalho é uma sequência de passos programados e ligados que efetuam tarefas de longa execução ou requerem a coordenação de vários passos em vários dispositivos ou nós geridos. Nas vantagens que um fluxo de trabalho tem em relação a um script normal incluem-se a capacidade de efetuar simultaneamente uma ação em vários dispositivos e a capacidade de recuperar automaticamente de falhas. Um fluxo de trabalho do Windows PowerShell é um script Windows PowerShell que utiliza o Windows Workflow Foundation. Embora o fluxo de trabalho seja escrito com Windows PowerShell sintaxe e iniciado por Windows PowerShell, é processado pelo Windows Workflow Foundation.

Estrutura Básica

Um fluxo de trabalho Windows PowerShell começa com a palavra-chave Fluxo de trabalho seguida do corpo do script entre chavetas. O nome do fluxo de trabalho segue a palavra-chave Fluxo de trabalho , conforme mostrado na seguinte sintaxe. O nome do fluxo de trabalho corresponde ao nome do runbook de Automatização.

Workflow Test-Runbook
{
   <Commands>
}

Para adicionar parâmetros ao fluxo de trabalho, utilize a palavra-chave Parâmetro , conforme mostrado na seguinte sintaxe. O Portal de gestão pedirá ao utilizador para fornecer valores para estes parâmetros quando o runbook for iniciado. Este exemplo utiliza o atributo Parâmetro opcional, que especifica se o parâmetro é ou não obrigatório.

Workflow Test-Runbook
{
  Param
  (
   [Parameter(Mandatory=<$True | $False>]
   [Type]$<ParameterName>,

   [Parameter(Mandatory=<$True | $False>]
   [Type]$<ParameterName>
  )
  <Commands>
}

Atribuição de nomes

O nome do fluxo de trabalho deve estar em conformidade com o formato Verbo-Nome que é padrão no Windows PowerShell. Pode consultar Os Verbos Aprovados para Windows PowerShell Comandos para obter uma lista de verbos aprovados a utilizar. O nome do fluxo de trabalho tem de corresponder ao nome do runbook de Automatização. Se o runbook estiver a ser importado, então o nome do ficheiro tem de corresponder ao nome do fluxo de trabalho e terminar em .ps1.

Limitações

Para obter uma lista completa das limitações e diferenças de sintaxe entre Windows PowerShell Fluxos de Trabalho e Windows PowerShell, veja Diferenças Sintáticas entre Fluxos de Trabalho de Script e Scripts.

Atividades

Uma atividade é uma tarefa específica num fluxo de trabalho. Tal como um script é composto por um ou mais comandos, um fluxo de trabalho é composto por uma ou mais atividades que são executadas numa sequência. A execução de um Fluxo de Trabalho do Windows PowerShell converte automaticamente muitos dos cmdlets do Windows PowerShell em atividades. Ao especificar um destes cmdlets no runbook, a atividade correspondente é executada pelo Windows Workflow Foundation. Para cmdlets sem uma atividade correspondente, Windows PowerShell Fluxo de Trabalho executa automaticamente o cmdlet numa atividade InlineScript. Existe um conjunto de cmdlets que estão excluídos e não podem ser utilizados num fluxo de trabalho, a menos que os inclua explicitamente num bloco InlineScript . Para obter mais informações sobre estes conceitos, veja Utilizar Atividades em Fluxos de Trabalho de Script.

As atividades de fluxo de trabalho partilham um conjunto de parâmetros comuns que permitem configurar o funcionamento delas. Para obter detalhes sobre os parâmetros comuns do fluxo de trabalho, veja about_WorkflowCommonParameters.

Módulos de Integração

Um Módulo de Integração é um pacote que contém um Módulo Windows PowerShell e pode ser importado para a Automatização. Windows PowerShell Módulos contêm cmdlets que podem ser utilizados em runbooks de Automatização. Produtos e serviços como o Operations Manager e o Azure têm módulos que incluem cmdlets específicos para o funcionamento deles.

Os Módulos de Integração importados para a Automatização estão automaticamente disponíveis para todos os runbooks. Uma vez que a Automatização se baseia no Windows PowerShell 4.0, suporta o carregamento automático de módulos, o que significa que os cmdlets dos módulos instalados podem ser utilizados sem importá-los para o script com Import-Module.

Qualquer Windows PowerShell módulo pode ser importado para a Automatização, desde que todas as respetivas dependências possam estar localizadas numa única pasta. Se o módulo depender das definições do registo ou dos ficheiros que não estão no caminho predefinido, pode ser importado, mas provavelmente não funcionará porque a Automatização não conseguirá localizar as respetivas dependências. Os módulos com dependências externas podem ser utilizados num runbook ao instalá-los noutro anfitrião com e, em seguida, aceder aos mesmos com um bloco de script InlineScript .

Com o Service Management Automation, pode utilizar módulos com dependências externas ao instalá-los em cada servidor de Trabalho. Embora os cmdlets nestes módulos possam ser utilizados em runbooks, não serão detetados pela Automatização para suportar funcionalidades como o assistente Inserir Atividade. Para utilizar esta funcionalidade, pode criar um módulo Portable com o cmdlet New-SmaPortableModule . Este cmdlet cria um módulo que inclui um stub para cada um dos respetivos cmdlets e pode ser importado para a Automatização. Quando um runbook utiliza um destes cmdlets, o stub redireciona a chamada para o cmdlet localizado no módulo externo. Esse módulo tem de estar instalado em cada servidor Worker ou a chamada falhará.

Execução Paralela

Uma das vantagens dos Fluxos de Trabalho do Windows PowerShell é a capacidade de executar um conjunto de comandos paralelamente, em vez de sequencialmente como acontece com um script normal. Esta é uma vantagem particularmente útil em runbooks porque lhes permite efetuar várias ações que demoram muito tempo a serem concluídas. Por exemplo, um runbook poderá aprovisionar um conjunto de máquinas virtuais. Em vez de efetuar cada processo de aprovisionamento em sequência entre si, as ações podem ser executadas em simultâneo, aumentando a eficiência geral. O runbook só continuará quando todas as ações estiverem concluídas.

Pode utilizar a palavra-chave Paralela para criar um bloco de scripts com vários comandos que serão executados em simultâneo. Este procedimento utiliza a sintaxe indicada abaixo. Neste caso, Activity1 e Activity2 serão iniciados ao mesmo tempo. Activity3 apenas será iniciado quando Activity1 e Activity2 forem concluídos.

Parallel
{
  <Activity1>
  <Activity2>
}
<Activity3>

Pode utilizar a construção ForEach -Parallel para processar comandos para cada item numa coleção em simultâneo. Os itens na coleção são processados paralelamente enquanto os comandos no bloco de scripts são executados sequencialmente. Este procedimento utiliza a sintaxe indicada abaixo. Neste caso, Activity1 começará ao mesmo tempo para todos os itens na coleção. Para cada item, Activity2 será iniciado depois de Activity1 ter sido concluído. A Atividade3 só será iniciada depois de a Atividade1 e a Atividade2 terem sido concluídas para todos os itens.

ForEach -Parallel ($<item> in $<collection>)
{
  <Activity1>
  <Activity2>
}
<Activity3>

A palavra-chave Sequência é utilizada para executar comandos em sequência num bloco de script paralelo . O bloco Script de sequência é executado em paralelo com outros comandos, mas os comandos no bloco são executados sequencialmente. Este procedimento utiliza a sintaxe indicada abaixo. Neste caso, Activity1, Activity2 e Activity3 serão iniciados ao mesmo tempo. Activity4 apenas será iniciado depois de Activity3 ter sido concluído. A atividade5 será iniciada depois de todas as outras atividades terem sido concluídas

Parallel
{
  <Activity1>
  <Activity2>

  Sequence
  {
   <Activity3>
   <Activity4>
  }
}
<Activity5>

Pontos de verificação

Um ponto de verificação é um instantâneo do estado atual do fluxo de trabalho que inclui o valor atual para variáveis e qualquer resultado gerado até esse momento. O último ponto de verificação a concluir num runbook é guardado na base de dados de Automatização para que o fluxo de trabalho possa ser retomado mesmo em caso de indisponibilidade. Os dados de ponto de verificação são removidos quando a tarefa de runbook for concluída.

Pode definir um ponto de verificação num fluxo de trabalho com a atividade Checkpoint-Workflow . Ao incluir esta atividade num runbook, um ponto de verificação é imediatamente removido. Se o runbook for suspenso devido a um erro, a tarefa será retomada a partir do último ponto de verificação definido.

No seguinte código de exemplo, ocorre um erro após Activity2, fazendo com que o runbook seja suspenso. Quando a tarefa é retomada, começa por executar Activity2 porque foi logo a seguir ao último ponto de verificação definido.

<Activity1>
Checkpoint-Workflow
<Activity2>
<Error>
<Activity3>

Deve definir pontos de verificação num runbook após atividades que podem ser propensas a erros e que não devem ser repetidos se o runbook for retomado. Por exemplo, o runbook pode criar uma máquina virtual. É possível definir um ponto de verificação antes e depois dos comandos para criar uma máquina virtual. Se a criação falhar, os comandos são repetidos quando o runbook for retomado. Se a criação for bem-sucedida, mas o runbook falhar mais tarde, a máquina virtual não será criada novamente quando o runbook for retomado.

Para obter mais informações sobre pontos de verificação, veja Adicionar Pontos de Verificação a um Fluxo de Trabalho de Script.

Suspender um Runbook

Pode forçar um runbook a suspender-se com a atividade Suspend-Workflow . Esta atividade definirá um ponto de verificação e causará a suspensão imediata do fluxo de trabalho. A suspensão de um fluxo de trabalho é útil para aqueles runbooks em que possa ser necessário efetuar um passo manual antes que outro conjunto de atividades seja executado.

Para obter mais informações sobre a suspensão de um fluxo de trabalho, veja Making a Workflow Suspend Itself (Suspender um Fluxo de Trabalho).

InlineScript

A atividade InlineScript executa um bloco de comandos numa sessão separada e sem fluxo de trabalho e devolve o resultado ao fluxo de trabalho. Enquanto os comandos num fluxo de trabalho são enviados para o Windows Workflow Foundation para processamento, os comandos num bloco InlineScript são processados pelo Windows PowerShell. A atividade utiliza os parâmetros comuns do fluxo de trabalho padrão, incluindo PSComputerName e PSCredential, que lhe permitem especificar que o bloco de código seja executado noutro computador ou com credenciais alternativas.

O InlineScript utiliza a sintaxe indicada abaixo.

InlineScript
{
  <Script Block>
} <Common Parameters>

A utilização mais comum para o InlineScript num runbook é executar um bloco de código noutro computador. Isto é necessário quando os cmdlets no runbook não são instalados na Automatização ou se a ação só tem permissões para ser executada localmente no computador de destino. Esta situação é ilustrada no diagrama seguinte.

Diagrama de script inline.

Para executar o bloco de código noutro computador, os parâmetros PSComputer e PSCredential são utilizados com a atividade InlineScript . Um recurso global, como uma Credencial ou Ligação , é normalmente utilizado num runbook para fornecer valores para estes parâmetros. O seguinte código de exemplo executa um conjunto de comandos num computador representado por uma ligação chamada MyConnection.

$con = Get-AutomationConnection -Name 'MyConnection'
$securepassword = ConvertTo-SecureString -AsPlainText -String $con.Password -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $con.Username, $securepassword
InlineScript
{
  <Commands>
} -PSComputer $con.ComputerName -PSCredential $cred

Embora as atividades inlineScript possam ser críticas em determinados runbooks, só devem ser utilizadas quando necessário pelos seguintes motivos:

  • Não pode utilizar pontos de verificação a partir de um bloco InlineScript . Se ocorrer alguma falha no bloco, é necessário recomeçar desde o início.

  • O InlineScript afeta a escalabilidade do runbook, uma vez que mantém a sessão de Windows PowerShell durante todo o comprimento do bloco InlineScript.

  • Atividades como Get-AutomationVariable e Get-AutomationPSCredential não estão disponíveis num bloco InlineScript.

Se precisar de utilizar um InlineScript, deve minimizar o âmbito. Por exemplo, se o runbook iterar numa coleção ao aplicar a mesma operação a cada item, o ciclo deverá ocorrer fora do InlineScript. Isto irá fornecer as seguintes vantagens:

  • Pode colocar o fluxo de trabalho no ponto de verificação após cada iteração. Se a tarefa for suspensa ou interrompida e retomada, o ciclo poderá continuar.

  • Pode utilizar ForEach "Paralelo para processar itens de coleção em simultâneo.

Tenha em atenção as seguintes recomendações se utilizar um InlineScript no seu runbook:

  • No entanto, pode transmitir valores para o script com o modificador de âmbito $Using . Por exemplo, uma variável chamada $abc que foi definida fora do InlineScript tornar-se-ia $using:abc dentro de um InlineScript.

  • Para devolver o resultado de um InlineScript, atribua o resultado a uma variável e produza os dados a serem devolvidos ao fluxo de saída. O exemplo seguinte atribui a cadeia hi a uma variável chamada $output.

    $output = InlineScript { Write-Output "hi" }
    
  • Evite definir fluxos de trabalho no âmbito InlineScript . Embora alguns fluxos de trabalho possam parecer funcionar corretamente, este não é um cenário testado. Como tal, pode deparar-se com mensagens de erro confusas ou comportamentos inesperados.

Para obter mais informações sobre como utilizar o InlineScript, veja Executar Comandos Windows PowerShell num Fluxo de Trabalho e about_InlineScript.

Passos seguintes