1

Я пытаюсь повторно использовать код в своих книгах SMA, но все, что я пытаюсь включить в функцию, похоже, не работает должным образом. Например, если я делаю это работает и возвращает имя пользователя удостоверения:Проблема с функцией рабочего процесса Powershell

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

Выходной:

enter image description here

Но если я включаю в это он больше не работает (возвращает нуль):

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 
} 

Моя цель была бы поставить несколько функций в отдельный модуль, а затем импортировать его на моем нетривиальных для многократного использования, но это на самом деле, кажется, не работает. Это рабочая книга (рабочий процесс powershell), созданная в Automation Service Automation (SMA).

Я читал, что есть некоторые ограничения с Powershell процесса по сравнению с чистым Powershell, но я не уверен, если я бил один из них: https://blogs.technet.microsoft.com/heyscriptingguy/2013/01/02/powershell-workflows-restrictions/

Благодарности

ответ

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 

Я нашел, что вам необходимо определить свои функции перед их использованием. Трудная часть заключалась в том, что вы должны были передать свои переменные в дочерний процесс.

Сфера охвата переменных принимает некоторые привыкания.