Как мне вызвать Start-Job, который зависит от функции в том же модуле PowerShell, что и функция, вызывающая Start-Job?

Я пишу PowerShell для взаимодействия с API AWS в одном модуле. Я написал одну функцию, Get-CloudFormation , которая возвращает статус CloudFormation. Я написал другую функцию, Delete-CloudFormation , которая после выполнения запроса API delete-CF пытается запустить задание, которое проверяет состояние CloudFormation с помощью моего ] Get-CloudFormation .

Я вызываю Export-ModuleMember в Get-CloudFormation (но не Delete-CloudFormation ; это частная функция). Get-CloudFormation определен в файле модуля раньше, чем Delete-CloudFormation .

Мой вызов Start-Job (внутри Delete-CloudFormation ) выглядит так:

$job = Start-Job -Name "CloudFormationWaitForDeleteSuccess" -ScriptBlock {
    $status = ""
    $time = 0
    while($status -ne "DELETE_COMPLETE") {
        Write-Verbose ("Checking CloudFormation status")
        $stack = Get-CloudFormation -accessKey $accessKey -secretKey $secretKey -stackName $stackName
        $status = $stack.Status
        Start-Sleep -seconds 10
        $time += 10
    }
    Write-Host "CloudFormation delete-complete after $time seconds $stackName"
}

Когда выполняется Delete-CloudFormation , я получаю исключение:

The term 'Get-CloudFormation' is not recognized as the name of a cmdlet, 
function, script file, or operable program. Check the spelling of the 
name, or if a path was included, verify that the path is correct and try again.
+ CategoryInfo          : ObjectNotFound: (Get-CloudFormation:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Почему? И как мне это исправить?

Я обнаружил 7152090 , который, на мой взгляд, похож, но вызвал Start-Job с помощью -InitializationScript {Get-CloudFormation} дает примерно такую ​​же ошибку.

Если я вызываю Start-Job с помощью -InitializationScript {Import-Module ". \ Awsutils.psm1"} , то . - это каталог документов моего профиля. Даже если я привяжу переменную к Get-Location вне Start-Job и назову ее как -InitializationScript {Import-Module "$ location \ awsutils.psm1"} .

8
задан Community 23 May 2017 в 11:44
поделиться