Escribo algunas palabras clave para hablar con la API de AWS, en un único módulo. He escrito una función, Get-CloudFormation
, que devuelve el estado de una CloudFormation. He escrito otra función, Delete-CloudFormation
, que después de disparar una solicitud de API de eliminación de CF, intenta para iniciar un trabajo que sondea el estado de CloudFormation usando mi Get-CloudFormation
.¿Cómo llamo a Start-Job que depende de una función en el mismo módulo de PowerShell que la función que llama Start-Job?
llamo Export-ModuleMember
en Get-CloudFormation
(pero no en Delete-CloudFormation
; esa es una función privada). Get-CloudFormation
se definió anteriormente en el archivo de módulo que Delete-CloudFormation
.
Mi Start-Job
llamada (en el interior Delete-CloudFormation
) se parece a:
$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"
}
Cuando Delete-CloudFormation
carreras, me sale una excepción:
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
¿Por qué? ¿Y cómo lo arreglo?
Encontré 7152090 que creo que es similar, pero llamar a Start-Job
con -InitializationScript { Get-CloudFormation }
da más o menos el mismo error.
Si llamo a Start-Job con -InitializationScript { Import-Module ".\awsutils.psm1" }
, entonces .
es el directorio de documentos de mi perfil. Incluso si enlace una variable a Get-Location
fuera del Start-Job
y la llamo como -InitializationScript { Import-Module "$location\awsutils.psm1" }
.
Supongo que si el OP desea ser más dinámico, el script principal podría copiar el módulo en el directorio C: \ Windows ... \ Powershell modules para que pueda usar Import-Module sin una ruta completa. Podría eliminarse más tarde ... jeje –
seguro ... ¡es una idea! :) –