我在单个模块中编写了一些Powershell来与AWS API进行通信。我编写了一个函数Get-CloudFormation,该函数返回CloudFormation的状态。我编写了另一个函数Delete-CloudFormation,在触发delete-CF API请求之后,该函数试图启动一个使用Get-CloudFormation轮询CloudFormation状态的作业。

我在Export-ModuleMember上调用Get-CloudFormation(但不是Delete-CloudFormation;这是一个私有(private)函数)。 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,则.是我的个人资料的文档目录。即使我将变量绑定(bind)到Get-Location之外的Start-Job并像-InitializationScript { Import-Module "$location\awsutils.psm1" }一样调用它。

最佳答案

在Powershell模块的规范路径中将模块awsutils.psm1移动:

$env:userprofile\documents\WindowsPowerShell\Modules\awsutils"

然后像这样初始化开始作业
-InitializationScript { Import-Module awsutils }

用我的自定义模块和入门作品进行了测试。

如果您不想移动psm1,也可以尝试以下操作:
-InizializationScript { import-module -name c:\yourpath\yourmodulefolder\ }

其中yourmoduleforder仅包含一个psm1文件。

关于powershell - 如何调用Start-Job,它依赖于与调用Start-Job的功能在同一Powershell模块中的功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9395673/

10-11 09:05