9

単一のモジュールで、AWS API と対話するためのいくつかの powershell を作成しています。Get-CloudFormationCloudFormation のステータスを返す1 つの関数を作成しました。別の関数 を作成しました。この関数はDelete-CloudFormation、delete-CF API リクエストを発行した後、 my を使用して CloudFormation のステータスをポーリングするジョブを開始しようとGet-CloudFormationします。

私は呼び出しますExport-ModuleMemberGet-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" }

4

4 に答える 4

8

awsutils.psm1PowerShellモジュールの正規パスにモジュールを移動します。

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

次に、このようにstart-jobを初期化します

-InitializationScript { Import-Module awsutils }

カスタムモジュールでテストし、ジョブを開始します。

また、psm1を移動したくない場合は、次のようにしてください。

-InizializationScript { import-module -name c:\yourpath\yourmodulefolder\ }

ここでyourmoduleforder、psm1ファイルは1つだけ含まれています。

于 2012-02-22T13:43:03.930 に答える
3

バックグラウンドジョブは自律的なものです。これらは個別のスレッド共有リソースではなく、実際にはまったく新しいPowerShell.exeプロセスで実行されます。Import-Moduleしたがって、モジュールメンバーをそこで利用できるようにするには、スクリプトブロック内で使用する必要があると思います。

于 2012-02-22T13:44:01.017 に答える
0

私がやったことは$env:WhereAmI = Get-Location、 への呼び出しの前に設定しStart-Job、次に に変更することでした-InitializationScript { Import-Module "$env:WhereAmI\awsutils.psm1 }。電話の後Start-Job、私はRemove-Item env:\WhereAmI片付けに電話しました。

($PSModulePath 内でモジュールを開発する必要のないソリューションが必要でした。ソース管理のセットアップが少し面倒だからです。)

回答ありがとうございます。

于 2012-02-22T17:10:57.330 に答える