1

Ich versuche, Code auf meinem SMA Runbooks zu verwenden, aber alles, was ich versuche, in eine Funktion zu setzen, scheint nicht wie erwartet zu funktionieren. Zum Beispiel, wenn ich dies tun es funktioniert und gibt den Benutzernamen der Berechtigungsnachweis:Powershell-Workflow-Funktion Problem

workflow RB_Test 
{ 
    $credent = Get-AutomationPSCredential -Name "CRED_TESTE" 
    $var = $credent.Username 
    "result = ${var}"  
} 

Ausgang:

enter image description here

Aber wenn ich in diese machen es funktioniert nicht mehr (Rückkehr null):

workflow RB_Test 
{ 
    function FN_Test 
    { 
     $credent = Get-AutomationPSCredential -Name "CRED_TESTE" 
     $var = $credent.Username 
     "result = ${var}"   
    } 
    FN_Test 
} 

Ausgang: enter image description here

Ich habe verschiedene Dinge ausprobiert, aber ohne Erfolg. Der Debug/Verbose-Bildschirm gibt nichts anderes zurück. Das funktioniert auch nicht:

Inlinescript { 
. FN_Test 
} 

Mein Ziel wäre, mehrere Funktionen in einem separaten Modul zu setzen und dann importieren Sie es auf meinem Runbooks für Wiederverwertbarkeit aber dies scheint nicht wirklich zu arbeiten. Dies ist ein Runbook (Powershell-Workflow), das in der Service Management Automation (SMA) erstellt wurde.

Ich habe gelesen, dass es einige Einschränkungen mit Powershell-Workflow sind im Vergleich zu reinem Powershell, aber ich bin nicht sicher, ob ich einer von ihnen bin schlagen: https://blogs.technet.microsoft.com/heyscriptingguy/2013/01/02/powershell-workflows-restrictions/

Dank

Antwort

0

Hier ist, was ich je hatte zu tun, um Funktionen zum Arbeiten zu bringen:

workflow FunctionTest { 
    function log { 
     param(
      [string]$Message 
     ) 

     Write-Output $Message 
     Write-Output "Filename: $Filename" 
     Write-Output "using:Filename: $using:Filename" 
     Write-Output "workflow:Filename: $workflow:Filename" 
     Write-Output "----" 
     ## Under what conditions is 'global' used? Can't be used in a workflow...Hey Scripting Guy! 
    } 

    workflow DoSomething { 
     param(
      [string]$Filename 
     ) 

     log "Starting DoSomething" 
    } 

    $Filename = "LogFile_2017.csv" 

    log "Starting workflow" 

    ## Variables need to be passed into workflow from parent-workflow 
    DoSomething -Filename $Filename 

    log "End workflow" 
} 

FunctionTest 

Ich fand, dass Sie Ihre Funktionen definieren müssen, bevor Sie sie verwenden. Der schwierige Teil war, herauszufinden, dass Sie Ihre Variablen in den Child-Workflow übergeben müssen.

Der Umfang der Variablen ist etwas gewöhnungsbedürftig.