Проблема с функцией рабочего процесса Powershell
Я пытаюсь повторно использовать код в моих книгах выполнения SMA, но все, что я пытаюсь поместить в функцию, похоже, не работает должным образом. Например, если я делаю это, он работает и возвращает имя пользователя для учетных данных:
workflow RB_Test
{
$credent = Get-AutomationPSCredential -Name "CRED_TESTE"
$var = $credent.Username
"result = ${var}"
}
Выход:
Но если я обращаюсь к этому, он больше не работает (возвращает ноль):
workflow RB_Test
{
function FN_Test
{
$credent = Get-AutomationPSCredential -Name "CRED_TESTE"
$var = $credent.Username
"result = ${var}"
}
FN_Test
}
Я пробовал разные вещи, но безуспешно. Экран отладки / подробностей не возвращает ничего другого. Это также не работает:
Inlinescript {
. FN_Test
}
Моя цель состояла бы в том, чтобы поместить несколько функций в отдельный модуль и затем импортировать его в мои книги запусков для повторного использования, но, похоже, это действительно не работает. Это runbook (рабочий процесс powershell), созданный в Service Management Automation (SMA).
Я читал, что есть некоторые ограничения в рабочем процессе Powershell по сравнению с чистым Powershell, но я не уверен, что ударил по одному из них: https://blogs.technet.microsoft.com/heyscriptingguy/2013/01/02/powershell-workflows-restrictions/
Спасибо
1 ответ
Вот что я должен был сделать, чтобы заставить функции работать:
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
Я обнаружил, что вам нужно определить свои функции перед их использованием. Сложнее было обнаружить, что вы должны передать свои переменные в дочерний рабочий процесс.
Область применения переменных требует некоторого привыкания.