如何使用资源管理器模块使用Azure自动化停止所有VM?

时间:2015-10-25 03:30:44

标签: azure azure-resource-manager azure-automation

我使用新的资源管理器创建了一些Azure VM,我想每天停止它们。

为此,我发布了一本Runbook来阻止经典和ARM虚拟机,我创建了一个每晚运行Runbook的调度程序:

workflow Stop-AzureVMs 
{ 
    $cred = Get-AutomationPSCredential -Name 'Cred'
    Add-AzureAccount -Credential $cred
    Select-AzureSubscription -Current 'SubscriptionName'

    Get-AzureVM | Stop-AzureVM –Force
    Get-AzureRmVM | Stop-AzureRmVM -Force
}

我已将AzureResourceManager模块导入我的Azure自动化帐户:

Azure Automation Modules

但是我收到了这个错误:

Exception
At line:34 char:2
 + Get-AzureRMVM | Stop-AzureRMVM -Force
 + ~~~~~~~~~~~~~ Cannot find the 'Get-AzureRMVM' command. If this command is defined as a workflow, ensure it is defined before the workflow that calls it. If it is a command intended to run directly within Windows PowerShell (or is not available on this system), place it in an InlineScript: 'InlineScript { Get-AzureRMVM }'

这怎么可能?

编辑:以下是解决方案

    $cred = Get-AutomationPSCredential -Name 'Cred'

    Add-AzureRmAccount -Credential $cred
    Select-AzureRmSubscription -Name 'SubscriptionName' -SubscipritionId 'SubscriptionId' 

    Get-AzureRmVM | Stop-AzureRmVM -Force

我发现的所有工作流程都没有提到使用Add-AzureRmAccount和Select-AzureRmSubcription而不是标准的Add-AzureAccount和Select-AzureSubscription。我认为Azure帐户的身份验证过程是一样的。

更新:现在可以在同一个Runbook中结合使用ASM和ARM cmdlet,有关ARM supported by default on Azure Automation 的更多信息,请参阅此帖子

7 个答案:

答案 0 :(得分:0)

根据我的理解,ASM模式是默认的。如果您要使用ARM命令,首先需要使用Switch-AzureMode

进行切换模式

另一个困惑是Get-AzureRMVM命令的目的是什么。我用Google搜索但却找不到任何东西 -

enter image description here

答案 1 :(得分:0)

Get-AzureRMVM cmdlet位于AzureRM.Compute模块中...... AzureRM * cmdlet仍处于预览状态,我认为它们尚未在Azure自动化中可用。

上面屏幕截图中的两个模块可能对应于0.9.x版本的cmdlet,并且在Switch-AzureMode后面确实存在两个不同的模块(Azure = ASM和AzureResourceManager = ARM)。 Switch-AzureMode只卸载一个并加载另一个。

如果Automation仍在使用0.9.x版本的cmdlet,那么您应该能够使用AzureResourceManager模块将Get-AzureVM用于ARM VM。

答案 2 :(得分:0)

您似乎已将旧版本的ARM cmdlet(Azure PS 1.0之前)导入Azure自动化。这是在*-AzureRm*重命名之前。所以tt应该是Stop-AzureVM而不是Stop-AzureRmVM

但是,这使您在尝试调用Azure服务管理或Azure资源管理器cmdlet时模糊不清 - 这正是Azure PS 1.0中重命名cmdlet名称的原因。我建议您按照here指南进行操作。

答案 3 :(得分:0)

以下是解决方案

$cred = Get-AutomationPSCredential -Name 'Cred'

Add-AzureRmAccount -Credential $cred
Select-AzureRmSubscription -Name 'SubscriptionName' -SubscriptionId 'SubscriptionId' 

Get-AzureRmVM | Stop-AzureRmVM -Force

现在还不可能将ARM和ASM cmdlet组合在同一个Runbook中......所以你必须只使用ARM cmdlet或ASM cmdlet。

此外,我发现的所有工作流程都没有提及使用Add-AzureRmAccount和Select-AzureRmSubcription而不是标准的Add-AzureAccount和Select-AzureSubscription。

我认为Azure帐户的身份验证过程是相同的。

答案 4 :(得分:0)

以下代码适用于旧式VM和新型VM,但请注意,这将关闭所有机器而不会发出警告。

{
    # TODO: update to the name of the credential asset in your Automation account
    $AutomationCredentialAssetName = "AzureAutomationRG"

    # Get the credential asset with access to my Azure subscription
    $Cred = Get-AutomationPSCredential -Name $AutomationCredentialAssetName

    # Authenticate to Azure Service Management and Azure Resource Manager
    Add-AzureAccount -Credential $Cred 
    Add-AzureRmAccount -Credential $Cred 

    "`n-Old Style VMS-`n"

    # Get and output Azure classic VMs
    $VMs = Get-AzureVM
    $VMs.Name

    Get-AzureVM | Stop-AzureVM -Force

    "`n-New Style Resource Group VMs-`n"

    # Get and output Azure v2 VMs
    $VMsv2 = Get-AzureRmVM
    $VMsv2.Name

    Get-AzureRmVM | Stop-AzureRmVM -Force
}

答案 5 :(得分:0)

对于新的Azure RM VM,请使用以下命令的访问扩展名:

Set-AzureRmVMAccessExtension -ResourceGroupName "ResourceGroupName" -VMName "VMName" -Username "Admin User Name" -Password "Admin Password" -Name "Extension Name"

请注意-Name参数是任意扩展名。

答案 6 :(得分:0)

派对可能会迟到,但我建议您查看此链接:

https://www.attosol.com/start-or-stop-all-vms-of-a-resource-group-in-azure/

基本上,您可以创建脚本并使用开关编写一些别名,以使您的工作变得非常轻松。