1

我正在尝试在我的 SMA 运行手册上重用代码,但我尝试放入函数中的所有内容似乎都没有按预期工作。例如,如果我这样做,它会起作用并返回凭据的用户名:

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

输出:

在此处输入图像描述

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

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

输出: 在此处输入图像描述

我尝试了不同的事情,但没有成功。调试/详细屏幕不会返回任何不同的内容。这也不起作用:

Inlinescript { 
 . FN_Test
}   

我的目标是将几个函数放入一个单独的模块中,然后将其导入我的运行手册以实现可重用性,但这似乎真的行不通。这是在服务管理自动化 (SMA) 中创建的运行手册(powershell 工作流)。

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

谢谢

4

1 回答 1

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

我发现你需要在使用它们之前定义你的函数。棘手的部分是发现您必须将变量传递到子工作流程中。

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

于 2017-02-21T22:01:19.360 回答