С помощью командлетов Windows Azure PowerShell, как выполнить Reset-RoleInstance и дождаться завершения операции - PullRequest
1 голос
/ 16 марта 2012

Как выполнить Reset-RoleInstance и дождаться завершения операции ...

Я пытался использовать командлеты Windows Azure PowerShell для выполнения Reset-RoleInstance, после чего |Get-OperationStatus -WaitToComplete.

Итак, в документации сказано: «Эта операция выполняется асинхронно. Чтобы определить, завершила ли служба управления обработку запроса, вызовите командлет Get-OperationStatus с идентификатором операции, возвращенным Reset-RoleInstance,и, необязательно, дождитесь завершения, указав параметр –WaitToComplete. "

Я пробовал эту версию:

Reset-RoleInstance -ServiceName MyTodo -DeploymentSlot production -SubscriptionId $subsId -Certificate $cert –reboot | GetOperationStatus -WaitToComplete

, но это имеет тип в" GetOperationStatus ".Поэтому, когда я заменяю на «Get-OperationStatus», PS жалуется, что OperationId является нулевым или пустым.

«Get-OperationStatus: Невозможно проверить аргумент для параметра« OperationId ». Аргумент является пустым или пустым. Укажите аргументэто не пусто или пусто, а затем попробуйте ввести команду d еще раз. "

Итак, затем я попробую эту версию сценария PS ...

Reset-RoleInstance -ServiceName $serviceName -DeploymentSlot Production -InstanceName $i.InstanceName -SubscriptionId $subid -Certificate $cert -Reboot -OutVariable out | Get-OperationStatus -OperationId out.OperationId -WaitToComplete

На этот раз Get-OperationStatusначинает выдавать ошибки ...

Get-OperationStatus: код состояния HTTP: BadRequest - сообщение об ошибке HTTP: идентификатор запроса операции не найден ... в Microsoft.WindowsAzure.Samples.ManagementTools.PowerShell.Services.Common.GetOperationStatusCommand

Get-OperationStatus: ссылка на объект не установлена ​​на экземпляр объекта .... в Microsoft.WindowsAzure.Samples.ManagementTools.PowerShell.Services.Common.GetOperationStatusCommand "*

Мне также удалось вывести $ out, и OperationId фактически нулевой, НО в элементе RoleInstances outpно есть это значение ... RoleInstances: {Имя экземпляра: MyService.MyWorker_IN_0 - Идентификатор операции: 6e87a07fb9a5474499aed3f9ebe99129 }

Вот выходные данные переменной $ out ... "RoleInstances:{Имя экземпляра: MyService.MyWorker_IN_0 - идентификатор операции: 6e87a07fb9a5474499aed3f9ebe99129} Имя_службы: ... имя моей службы SubscriptionId: ... идентификатор моей подписки Сертификат: ... информация о сертификате

Идентификатор операции: "

1 Ответ

1 голос
/ 11 апреля 2012

Когда вы используете Reset-RoleInstance , он либо перезагружает / повторно создает экземпляры развертывания.
Вся операция как таковая не имеет OperationId , но отдельный RoleInstances имеет соответствующий OperationId каждый.

Вот так выглядит вывод Reset-RoleInstance:

PS > $operation = Reset-RoleInstance -ServiceName "MyServiceName" -DeploymentSlot "production" -Restart -SubscriptionId "MySubscriptionID" -Certificate $cert
PS > $operation
-
RoleInstances  : { Instance Name: MyInst1 - Operation Id: OpId1, 
-                  Instance Name: MyInst2 - Operation Id: OpId2 }

ServiceName    : MyServiceName
SubscriptionId : MySubscriptionID
Certificate    : [Subject]
-                ------- blah --------

-                [Issuer]
-                ------- blah --------

-                [Serial Number]
-                ------- blah --------

-                [Not Before]
-                ------- blah --------

-                [Not After]
-                ------- blah --------

-                [Thumbprint]
-                ------- blah --------

OperationId    : <NullOrEmpty>

Как видите, OperationId в конце равен NullOrEmpty . Таким образом, вам не следует ожидать OperationId Reset-RoleInstance , а следует ожидать OperationIds отдельного лица RoleInstances
Например: OpId1, OpId2

PS > Write-Host "Rebooting the instances"
PS > $operation = Reset-RoleInstance -Reboot -SubscriptionId $SubscriptionId -ServiceName $ServiceName -DeploymentSlot "Production" -Certificate $certificate
PS > Write-Host "Waiting for all reboot operations to complete..."
PS > $operation.RoleInstances | % { Get-OperationStatus -OperationId $_.OperationId -WaitToComplete -SubscriptionId $SubscriptionId -Certificate $certificate }
PS > Write-Host "All role-instances have been rebooted"
...