Sto scrivendo un powershell per parlare con l'API AWS, in un singolo modulo. Ho scritto una funzione, Get-CloudFormation
, che restituisce lo stato di una CloudFormation. Ho scritto un'altra funzione, Delete-CloudFormation
, che dopo aver sparato una richiesta dell'API delete-CF, tenta per avviare un lavoro che esegue il polling dello stato di CloudFormation usando il mio Get-CloudFormation
.Come si chiama Start-Job che dipende da una funzione nello stesso modulo PowerShell della funzione che chiama Start-Job?
Io chiamo Export-ModuleMember
su Get-CloudFormation
(ma non Delete-CloudFormation
; questa è una funzione privata). Get-CloudFormation
è definito in precedenza nel file di modulo di Delete-CloudFormation
.
mio Start-Job
chiamata (all'interno Delete-CloudFormation
) assomiglia:
$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"
}
Quando Delete-CloudFormation
piste, ottengo un'eccezione:
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
Perché? E come lo aggiusto?
Ho trovato 7152090 che penso sia simile, ma chiamando Start-Job
con -InitializationScript { Get-CloudFormation }
dà all'incirca lo stesso errore.
Se chiamo Start-Job con -InitializationScript { Import-Module ".\awsutils.psm1" }
quindi .
è la directory dei documenti del mio profilo. Anche se associo una variabile a all'esterno dello Start-Job
e la chiamo come -InitializationScript { Import-Module "$location\awsutils.psm1" }
.
Immagino che se l'OP voleva essere più dinamico, lo script principale poteva copiare il modulo nella cartella C: \ Windows ... \ Powershell in modo che potesse usare solo Import-Module senza un percorso completo. Potrebbe essere rimosso più tardi ... hehe –
sicuro .. è un'idea! :) –