Я пишу немного 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" }
.