Udostępnij za pośrednictwem


Pojęcia dotyczące przepływu pracy programu Windows PowerShell

Jeden typ elementu Runbook dla usługi Service Management Automation jest oparty na przepływach pracy programu Windows PowerShell. Ten artykuł zawiera krótkie omówienie krytycznych funkcji przepływów pracy, które są wspólne dla elementów Runbook usługi Automation. Szczegółowe informacje na temat przepływów pracy są dostępne w artykule Wprowadzenie do przepływu pracy programu Windows PowerShell.

Struktura elementu Runbook jest identyczna między elementami Runbook dla usługi Service Management Automation i usługą Microsoft Azure Automation , chociaż obie te elementy będą zwykle współdziałać z różnymi zasobami.

Przepływy pracy programu Windows PowerShell

Przepływ pracy to sekwencja zaprogramowanych, połączonych ze sobą czynności służących do wykonywania długotrwałych zadań lub do zapewnienia koordynacji wielu czynności na wielu różnych urządzeniach albo w wielu węzłach zarządzanych. Korzyści wynikające z przepływu pracy za pośrednictwem normalnego skryptu obejmują możliwość jednoczesnego wykonywania akcji na wielu urządzeniach oraz możliwość automatycznego odzyskiwania po awariach. Przepływ pracy programu Windows PowerShell to skrypt programu Windows PowerShell korzystający z programu Windows Workflow Foundation. Przepływ pracy jest zapisywany przy użyciu składni programu Windows PowerShell i uruchamiany przez program Windows PowerShell, ale jest przetwarzany przez program Windows Workflow Foundation.

Podstawowa struktura

Przepływ pracy programu Windows PowerShell rozpoczyna się od słowa kluczowego Przepływ pracy , po którym następuje treść skryptu ujętego w nawiasy klamrowe. Nazwa przepływu pracy jest zgodna ze słowem kluczowym Przepływ pracy , jak pokazano w poniższej składni. Nazwa przepływu pracy jest zgodna z nazwą elementu Runbook usługi Automation.

Workflow Test-Runbook
{
   <Commands>
}

Aby dodać parametry do przepływu pracy, użyj słowa kluczowego Param , jak pokazano w poniższej składni. Podczas uruchamiania elementu Runbook portal zarządzania wyświetli użytkownikowi monit o podanie wartości tych parametrów. W tym przykładzie użyto opcjonalnego atrybutu Parametr, który określa, czy parametr jest obowiązkowy.

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

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

Nazewnictwo

Nazwa przepływu pracy powinna być zgodna z formatem Czasownik-Noun, który jest standardowy w programie Windows PowerShell. Aby uzyskać listę zatwierdzonych czasowników do użycia, można zapoznać się z zatwierdzonymi zleceniami dla poleceń programu Windows PowerShell. Nazwa przepływu pracy musi być zgodna z nazwą elementu Runbook usługi Automation. Jeśli element Runbook jest importowany, nazwa pliku musi być zgodna z nazwą przepływu pracy i musi kończyć się ciągiem .ps1.

Ograniczenia

Aby uzyskać pełną listę ograniczeń i różnic składni między przepływami pracy programu Windows PowerShell i programem Windows PowerShell, zobacz Składniowe różnice między przepływami pracy skryptów i skryptami.

Działania

Działanie jest określonym zadaniem w przepływie pracy. Tak jak skrypt składa się z jednego polecenia lub kilku poleceń, tak przepływ pracy składa się z działania lub kilku działań wykonywanych w określonej kolejności. Przepływ pracy programu Windows PowerShell automatycznie konwertuje wiele poleceń cmdlet programu Windows PowerShell na działania uruchamiane przez przepływ pracy. Po określeniu jednego z tych poleceń cmdlet w elememencie Runbook odpowiednie działanie jest faktycznie uruchamiane przez program Windows Workflow Foundation. W przypadku poleceń cmdlet bez odpowiedniego działania przepływ pracy programu Windows PowerShell automatycznie uruchamia polecenie cmdlet w działaniu inlineScript . Istnieje zestaw poleceń cmdlet, które są wykluczone i nie można ich używać w przepływie pracy, chyba że jawnie dołączysz je do bloku ŚródlineScript . Aby uzyskać więcej informacji na temat tych pojęć, zobacz Using Activities in Script Workflows (Używanie działań w przepływach pracy skryptów).

Działania przepływu pracy współużytkują zestaw typowych parametrów, aby skonfigurować operację. Aby uzyskać szczegółowe informacje o typowych parametrach przepływu pracy, zobacz about_WorkflowCommonParameters.

Moduły integracji

Moduł integracji to pakiet zawierający moduł programu Windows PowerShell i można go zaimportować do usługi Automation. Moduły programu Windows PowerShell zawierają polecenia cmdlet, których można używać w elementach Runbook usługi Automation. Produkty i usługi, takie jak Operations Manager i Azure, zawierają moduły zawierające polecenia cmdlet specyficzne dla ich operacji.

Moduły integracji importowane do usługi Automation są automatycznie dostępne dla wszystkich elementów Runbook. Ponieważ usługa Automation jest oparta na programie Windows PowerShell 4.0, obsługuje automatyczne ładowanie modułów, co oznacza, że polecenia cmdlet z zainstalowanych modułów mogą być używane bez importowania ich do skryptu za pomocą modułu Import-Module.

Każdy moduł programu Windows PowerShell można zaimportować do usługi Automation, o ile wszystkie jego zależności mogą znajdować się w jednym folderze. Jeśli moduł zależy od ustawień rejestru lub plików, które nie są w ścieżce domyślnej, można go zaimportować, ale najprawdopodobniej nie będzie działać, ponieważ usługa Automation nie będzie mogła zlokalizować jego zależności. Moduły z zależnościami zewnętrznymi mogą być używane w elemencie Runbook, instalując je na innym hoście, a następnie uzyskiwać do nich dostęp za pomocą bloku skryptu inlineScript .

Za pomocą usługi Service Management Automation można używać modułów z zależnościami zewnętrznymi, instalując je na każdym serwerze roboczym. Polecenia cmdlet w tych modułach mogą być używane w elementach Runbook, ale nie zostaną odnalezione przez usługę Automation w celu obsługi takich funkcji, jak kreator Wstaw działanie. Aby użyć tej funkcji, możesz utworzyć moduł Przenośny przy użyciu polecenia cmdlet New-SmaPortableModule . To polecenie cmdlet tworzy moduł zawierający wycinkę dla każdego z jego poleceń cmdlet i można go zaimportować do usługi Automation. Gdy element Runbook używa jednego z tych poleceń cmdlet, element wycinkowy przekierowuje wywołanie do rzeczywistego polecenia cmdlet w module zewnętrznym. Ten moduł musi być zainstalowany na każdym serwerze roboczym lub wywołanie zakończy się niepowodzeniem.

Równoległego

Jedną z zalet przepływów pracy programu Windows PowerShell jest możliwość równoległego wykonywania zestawu poleceń zamiast sekwencyjnie, jak w przypadku typowego skryptu. Jest to szczególnie przydatne w elementach Runbook, ponieważ mogą wykonywać wiele akcji, które muszą zająć dużo czasu. Na przykład element Runbook może aprowizować zestaw maszyn wirtualnych. Zamiast wykonywać poszczególne procesy aprowizacji w sekwencji ze sobą, akcje można wykonać jednocześnie, zwiększając ogólną wydajność. Tylko wtedy, gdy wszystkie zostaną ukończone, element Runbook będzie kontynuowany.

Możesz użyć słowa kluczowego Parallel , aby utworzyć blok skryptu z wieloma poleceniami, które będą uruchamiane współbieżnie. Używa to składni pokazanej poniżej. W takim przypadku działania Activity1 i Activity2 zostaną uruchomione w tym samym czasie. Działanie 3 zostanie uruchomione dopiero po zakończeniu działania Activity1 i Activity2.

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

Można użyć konstrukcji ForEach -Parallel do przetwarzania poleceń dla każdego elementu w kolekcji jednocześnie. Elementy w kolekcji są przetwarzane równolegle, podczas gdy polecenia w bloku skryptu są uruchamiane sekwencyjnie. Używa to składni pokazanej poniżej. W takim przypadku działanie Activity1 zostanie uruchomione w tym samym czasie dla wszystkich elementów w kolekcji. Dla każdego elementu działanie Activity2 zostanie uruchomione po zakończeniu działania Activity1. Działanie 3 zostanie uruchomione dopiero po zakończeniu działania Activity1 i Activity2 dla wszystkich elementów.

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

Słowo kluczowe Sequence służy do uruchamiania poleceń w sekwencji w bloku skryptu równoległego. Blok skryptu sekwencji jest uruchamiany równolegle z innymi poleceniami, ale polecenia w bloku są uruchamiane sekwencyjnie. Używa to składni pokazanej poniżej. W takim przypadku działania Activity1, Activity2 i Activity3 zostaną uruchomione w tym samym czasie. Działanie Activity4 zostanie uruchomione dopiero po zakończeniu działania Activity3. Działanie5 rozpocznie się po zakończeniu wszystkich innych działań

Parallel
{
  <Activity1>
  <Activity2>

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

Punkty kontrolne

Punkt kontrolny to migawka bieżącego stanu przepływu pracy, która zawiera bieżącą wartość zmiennych i wszystkie dane wyjściowe wygenerowane w tym punkcie. Ostatni punkt kontrolny do ukończenia w elemecie Runbook jest zapisywany w bazie danych usługi Automation, dzięki czemu przepływ pracy może zostać wznowiony nawet w przypadku awarii. Dane punktu kontrolnego są usuwane po zakończeniu zadania elementu Runbook.

Punkt kontrolny można ustawić w przepływie pracy za pomocą działania Checkpoint-Workflow . Po dołączeniu tego działania do elementu Runbook punkt kontrolny jest natychmiast wykonywany. Jeśli element Runbook zostanie zawieszony przez błąd, po wznowieniu zadania zostanie wznowiony od momentu ostatniego zestawu punktów kontrolnych.

W poniższym przykładowym kodzie błąd występuje po działaniu Activity2, powodując wstrzymanie elementu Runbook. Po wznowieniu zadania rozpoczyna się od uruchomienia działania Activity2, ponieważ było to tuż po ostatnim zestawie punktów kontrolnych.

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

Punkty kontrolne należy ustawić w elemecie Runbook po działaniach, które mogą być podatne na błędy i nie powinny być powtarzane, jeśli element Runbook zostanie wznowiony. Na przykład element Runbook może utworzyć maszynę wirtualną. Można ustawić punkt kontrolny zarówno przed, jak i po poleceniach, aby utworzyć maszynę wirtualną. Jeśli tworzenie zakończy się niepowodzeniem, polecenia są powtarzane po wznowieniu elementu Runbook. Jeśli tworzenie zakończy się pomyślnie, ale element Runbook zakończy się niepowodzeniem, maszyna wirtualna nie zostanie ponownie utworzona po wznowieniu elementu Runbook.

Aby uzyskać więcej informacji na temat punktów kontrolnych, zobacz Dodawanie punktów kontrolnych do przepływu pracy skryptu.

Wstrzymywanie elementu Runbook

Możesz wymusić wstrzymanie elementu Runbook za pomocą działania Suspend-Workflow . To działanie ustawi punkt kontrolny i spowoduje natychmiastowe wstrzymanie przepływu pracy. Wstrzymanie przepływu pracy jest przydatne w przypadku elementów Runbook, które mogą wymagać ręcznego wykonania kroku przed uruchomieniem innego zestawu działań.

Aby uzyskać więcej informacji na temat zawieszania przepływu pracy, zobacz Tworzenie samego wstrzymania przepływu pracy.

Śródliniowy kodScript

Działanie InlineScript uruchamia blok poleceń w oddzielnej sesji bez przepływu pracy i zwraca dane wyjściowe do przepływu pracy. Podczas gdy polecenia w przepływie pracy są wysyłane do programu Windows Workflow Foundation do przetwarzania, polecenia w bloku śródliniowym językaScript są przetwarzane przez program Windows PowerShell. Działanie używa standardowych typowych parametrów przepływu pracy, w tym PSComputerName i PSCredential, co pozwala określić, że blok kodu ma być uruchamiany na innym komputerze lub przy użyciu alternatywnych poświadczeń.

Język InlineScript używa składni pokazanej poniżej.

InlineScript
{
  <Script Block>
} <Common Parameters>

Najczęstszym zastosowaniem w języku InlineScript w elememencie Runbook jest uruchomienie bloku kodu na innym komputerze. Jest to wymagane, gdy polecenia cmdlet w elemecie Runbook nie są zainstalowane w usłudze Automation lub jeśli akcja ma uprawnienia do wykonania tylko lokalnie na komputerze docelowym. Przedstawiono to na poniższym diagramie.

Diagram skryptu wbudowanego.

Aby uruchomić blok kodu na innym komputerze, parametry PSComputer i PSCredential są używane z działaniem InlineScript . Zasób globalny, taki jak poświadczenie lub połączenie, jest zwykle używany w elemecie Runbook do podawania wartości dla tych parametrów. Poniższy przykładowy kod uruchamia zestaw poleceń na komputerze reprezentowanym przez połączenie o nazwie 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

Chociaż działania inlineScript mogą być krytyczne w niektórych elementach Runbook, powinny być używane tylko w razie potrzeby z następujących powodów:

  • Nie można używać punktów kontrolnych z poziomu bloku ŚródlineScript . Jeśli w bloku wystąpi błąd, należy go wznowić od początku.

  • Język InlineScript ma wpływ na skalowalność elementu Runbook, ponieważ przechowuje sesję programu Windows PowerShell dla całej długości bloku InlineScript.

  • Działania, takie jak Get-AutomationVariable i Get-AutomationPSCredential , nie są dostępne w bloku śródliniowym.

Jeśli musisz użyć kodu InlineScript, należy zminimalizować jego zakres. Jeśli na przykład element Runbook iteruje kolekcję podczas stosowania tej samej operacji do każdego elementu, pętla powinna występować poza inlineScript. Zapewni to następujące korzyści:

  • Możesz określić punkt kontrolny przepływu pracy po każdej iteracji. Jeśli zadanie zostanie zawieszone lub przerwane i wznowione, pętla będzie mogła zostać wznowiona.

  • Możesz użyć polecenia ForEach "Parallel , aby obsługiwać elementy kolekcji jednocześnie.

Pamiętaj o następujących zaleceniach, jeśli w elemecie Runbook jest używany kod InlineScript :

  • Wartości można jednak przekazać do skryptu za pomocą modyfikatora zakresu $Using . Na przykład zmienna o nazwie $abc ustawiona poza inlineScript stanie się $using:abc wewnątrz inlineScript.

  • Aby zwrócić dane wyjściowe z inlineScript, przypisz dane wyjściowe do zmiennej i wyjmij wszystkie dane, które mają zostać zwrócone do strumienia wyjściowego. Poniższy przykład przypisuje hi ciągu do zmiennej o nazwie $output.

    $output = InlineScript { Write-Output "hi" }
    
  • Unikaj definiowania przepływów pracy w zakresie inlineScript . Mimo że niektóre przepływy pracy mogą działać prawidłowo, nie jest to testowany scenariusz. W związku z tym może wystąpić mylące komunikaty o błędach lub nieoczekiwane zachowanie.

Aby uzyskać więcej informacji na temat korzystania z języka InlineScript, zobacz Uruchamianie poleceń programu Windows PowerShell w przepływie pracy i about_InlineScript.

Następne kroki