我在單個模塊中編寫了一些與AWS API交談的PowerShell。我寫了一個函數,Get-CloudFormation
,它返回CloudFormation的狀態。我已經編寫了另一個函數Delete-CloudFormation
,它在發出刪除CF API請求後,嘗試開始一個作業,該作業使用我的Get-CloudFormation
來輪詢CloudFormation的狀態。如何調用Start-Job,它取決於調用Start-Job的函數在相同的PowerShell模塊中的函數?
我打電話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 }
給出了大致相同的錯誤。
如果我打電話給-InitializationScript { Import-Module ".\awsutils.psm1" }
開始工作,那麼.
是我的個人資料的文檔目錄。即使我將變量綁定到Start-Job
之外的Get-Location
,並將其稱爲-InitializationScript { Import-Module "$location\awsutils.psm1" }
。
我想,如果在OP想成爲更有活力的主腳本可以在模塊複製到C:\ WINDOWS \ PowerShell模塊目錄,以便它可以只使用導入模塊沒有一個完整路徑。它可以在以後刪除...嘿嘿 – 2012-02-22 13:54:52
當然..這是一個想法! :) – 2012-02-22 13:59:09