2014-09-04 2 views
1

Я новичок в Powershell, и я буду совершенно совершенно знаком с Azure Powershell. Мне нужно создать сценарий powershell, чтобы отключить все найденные в подписке виртуальные машины. Я предполагаю, что это нужно сделать с помощью сертификата управления. Но не знаю, с чего начать. Я просто сделал несколько простых строк кода, чтобы перечислить все ВМ, как показано ниже:Azure Powershell для остановки виртуальных машин в подписке

Add-AzureAccount -Environment "AzureCloud" 
$subscription = "my-sub-scri-ption" 
Select-AzureSubscription -Current "SubName" 
Set-AzureSubscription -SubscriptionName "SubName" 
Get-AzureVM -ServiceName "VM1" 

Выход получил это «Get-AzureVM: Значение не может быть пустым Имя Параметр:. SubscriptionId».

Может кто-то, пожалуйста, помогите мне в этом отношении?

** EDIT: **

Скрипт PowerShell, который я использую ниже:

Add-AzureAccount -Environment "AzureCloud" 
Set-AzureSubscription -SubscriptionName "My Subs" 
$serviceName = "Service01" 
$vmName = "Service01" 
Get-AzureVM | Stop-AzureVM -Force 

Хотя во время работы он показывает выполнение скрипта будет успешным, я могу видеть, что до сих пор В.М. включен. Обратите внимание, что имя_имя и vmName одинаково в моем случае. Что-то не так в моем коде?

** Re-Edit ** Выполненный код:

Add-AzureAccount -Environment "AzureCloud" 
Set-AzureSubscription -SubscriptionName "My Subs" 
$serviceName = "Service01" 
$vmName = "Service01" 
Get-AzureVM 

Ошибка в коде выше:

Get-AzureVM : Value cannot be null. 
Parameter name: subscriptionId 
At D:\TC_PS\Untitled1.ps1:5 char:1 
+ Get-AzureVM 
+ ~~~~~~~~~~~ 
+ CategoryInfo   : CloseError: (:) [Get-AzureVM], ArgumentNullException 
+ FullyQualifiedErrorId : Microsoft.WindowsAzure.Commands.ServiceManagement.IaaS.GetAzureVMCommand 
+0

Не могли бы вы распечатать результат Get-AzureVM, потому что опубликованный код, кажется, хорошо сформирован. –

+0

@Michael: См. Переиздание !! – serverstackqns

+0

Эта ошибка возникает, когда выбранная подписка недействительна. Теперь я бы запускал 'Get-AzureSubscription | Remove-AzureSubscription', это удалит все ваши подписки (я думаю, вы запустили Set-AzureSubscription перед добавлением accout), а затем просто запустите 'Add-AzureAccount', после входа в систему проверьте, что ваши подписки только запускают' Get-AzureSubscription', вы не необходимо запустить Set-AzureSubscription (который используется для изменения подписки, например, для установки текущего имени хранилища), после того, как вы проверите правильное имя SubscriptionName, просто запустите 'Select-AzureSubscription 'MySubscriptionName", затем 'Get-AzureVM' –

ответ

4

Вы можете начать отсюда: Getting Started with Windows Azure PowerShell

Тогда вы может просто запустить Get-AzureVM, который вернет все виртуальные машины для каждого облачного сервиса.

Чтобы остановить виртуальную машину: Stop-AzureVM -ServiceName xxx -Name vm-test-01

Чтобы остановить все виртуальные машины в подписке просто запустите: Get-AzureVM | Stop-AzureVM -Force

Переключатель -Force необходимо остановить последнюю виртуальную машину облачных сервисов, в противном случае система будет выпустите ошибку при попытке остановить последнюю виртуальную машину в службе, чтобы избежать падения всех ресурсов вашего опубликованного приложения.

Если вы не указали переключатель -StayProvisioned, виртуальная машина будет освобождена. Это поведение по умолчанию Stop-AzureVM.

+0

Спасибо. Я хочу остановить (остановить-освободить) все vm от конкретной подписки с помощью одной команды. Это связано с тем, что в будущем количество виртуальных машин может измениться. Таким образом, эти имена нельзя передать. Любая возможность для этого? – serverstackqns

+0

Да, конечно, возможно, просто запустите 'Get-AzureVM | Stop-AzureVM -Force, необходимо остановить последнюю виртуальную машину облачного сервиса. –

+0

Ok Micheal .. Это понятно и хорошо. Я хотел бы освободить виртуальную машину (чтобы свести к минимуму затраты) вместе с отключением виртуальной машины. Как это можно достичь ..? – serverstackqns