1

ローカルで正常に実行される次の PS スクリプトがあります。

Get-AzureVM | Where-Object { $_.Name -eq "my-server-selector" }  | select name | ForEach-Object {
    Write-Output $_.Name 
    Start-AzureVM $_.Name $_.Name
}     

ローカル PS コンソールのコンテキストで、サブスクリプション情報を追加すると、コードは問題なく実行されます。すべての VM が出力に出力され、サーバーが起動されます。

クラウドに移動するときは、他にいくつかのことを行う必要があります。つまり、サブスクリプションをスコープに入れます。これを行うには、ポータルで資格情報資産を作成し、その資格情報を使用してスクリプトにアカウントを追加し、スクリプトで正しいサブスクリプションを選択します。また、それをワークフローにラップします (後でパラメーター化する予定の側面があります)。

最終的なコードは次のとおりです。

workflow StartServer
{   
    $credential = GetAutomationPSCredential -Name "credential-asset-name" 

    Add-AzureAccount -Credential $credential

    Select-AzureSubscription -SubscriptionName "subscription-name"


    Write-Output "Starting the server."

    Get-AzureVM | Where-Object { $_.Name -Contains "my-server-selector" }  | select name | ForEach-Object {
        Write-Output $_.Name 
        Start-AzureVM $_.Name $_.Name
    }            

    Write-Output "Execution Complete."

}

コマンドを削除するStart-AzureVMと、ワークフローは期待どおりに実行されます。一致するすべての VM のリストが出力されます。コマンドを元に戻そうとすると、次のエラーが発生します。

Parameter set cannot be resolved using the specified named parameters.

だから、私が知っていると思うこと:

  • VMの正しいリストを取得しているため、資格情報は機能しています
  • 出力にダンプされるため、サブスクリプションは正しく設定されています
  • スクリプトの内部部分は、何も変更せずにローカルの PowerShell コンソールで動作します。

これを機能させるには、Azure Automation ワークフローで何を別の方法で行う必要があるかについて、誰かアイデアを提供できますか?

4

2 に答える 2

1

Where-Object修正は、 のフィルタと の呼び出しの両方で、パラメータの命名をより明確にすることでしたStart-AzureVM。なぜこれが違いを生むのかわかりません。私が言ったように、サーバーの名前を書き込むための呼び出しは、明示的なパラメーター名がなくても機能しましたが、見よ、ここではそれを設定して機能します。

内部ブロックの最終的なコードは次のとおりです。

Get-AzureVM | Where-Object -FilterScript { $_.Name -Contains "my-server-selector" }  | select name | ForEach-Object {
    Write-Output $_.Name 
    Start-AzureVM -ServiceName $_.Name -Name $_.Name
}   

Twitter の @DexterPOSH の方向性に感謝し-FilterScriptます。

于 2014-11-27T14:11:08.983 に答える
0

この正確な問題について説明しているhttp://azure.microsoft.com/blog/2014/11/25/introducing-the-azure-automation-script-converter/をご覧ください。ISE で Powershell を作成して Azure Automation に移行する場合は、Powershell ワークフローと Powershell スクリプトとの間にいくつかの違いがあるため、ISE で Powershell ワークフローとしてテスト/記述していることを確認してください。

または、PS スクリプトを取得して Azure Automation で使用する必要がある場合は、スクリプトをコピーして貼り付けるのではなく、必ずインポートしてください。その後、Azure Automation によって PS スクリプトが PS ワークフローに変換されます。上記のリンクには、これに関する詳細があります。

于 2014-11-27T19:52:51.287 に答える