Powershell工作流功能问题

时间:2016-05-25 18:32:31

标签: powershell workflow powershell-workflow service-management runbook

我试图在我的SMA Runbook上重用代码但是我尝试放入函数中的所有内容似乎都没有按预期工作。 例如,如果我这样做,它将起作用并返回凭证的用户名:

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

输出:

enter image description here

但是,如果我变成这个,它就不再起作用了(返回null):

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

输出:     enter image description here

我尝试了不同的东西但没有成功。 debug / verbose屏幕不会返回任何不同的内容。这也行不通:

Inlinescript { 
 . FN_Test
}   

我的目标是将多个函数放入一个单独的模块中,然后将其导入我的Runbook以获得可重用性,但这似乎无法正常工作。 这是在Service Management Automation(SMA)中创建的Runbook(powershell工作流)。

我已经读过,与纯Powershell相比,Powershell工作流程有一些限制,但我不确定我是否会遇到其中一个: https://blogs.technet.microsoft.com/heyscriptingguy/2013/01/02/powershell-workflows-restrictions/

谢谢

1 个答案:

答案 0 :(得分:0)

这是我为使功能发挥作用所必须做的事情:

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

我发现你需要在使用之前定义你的功能。棘手的部分是发现你必须将变量传递给子工作流程。

变量的范围需要一些时间来适应。