0

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

为此,我发布了一个运行手册来停止经典和 ARM 虚拟机,并且我创建了一个调度程序,它每天晚上运行运行手册:

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 自动化模块

但我收到此错误:

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 帐户的身份验证过程是相同的。

更新:现在可以将 ASM 和 ARM cmdlet 组合在同一个运行手册中,有关 Azure 自动化默认支持的 ARM的更多信息,请参阅这篇文章

4

7 回答 7

1

看起来您已将旧版本的 ARM cmdlet(在Azure PS 1.0之前)导入 Azure 自动化。这是*-AzureRm*改名前的事了。所以 tt 应该Stop-AzureVM不是Stop-AzureRmVM

但是,这使得您是否尝试调用 Azure 服务管理或 Azure 资源管理器 cmdlet 变得模棱两可——这正是在 Azure PS 1.0 中重命名 cmdlet 名称的原因。我建议您按照此处的指导进行操作。

于 2015-10-26T20:22:05.147 回答
0

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

另一个困惑是Get-AzureRMVM指挥的目的是什么。我用谷歌搜索但找不到任何东西 -

在此处输入图像描述

于 2015-10-25T19:12:10.437 回答
0

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

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

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

于 2015-10-26T16:05:10.930 回答
0

下面是解决方案

$cred = Get-AutomationPSCredential -Name 'Cred'

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

Get-AzureRmVM | Stop-AzureRmVM -Force

显然,在同一个运行手册中组合 ARM 和 ASM cmdlet 是不可能的……所以你必须只使用 ARM cmdlet 或 ASM cmdlet。

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

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

于 2015-10-27T02:36:49.967 回答
0

以下代码适用于旧式和新式 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
}
于 2016-02-03T10:24:03.790 回答
0

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

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

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

于 2016-02-06T05:13:43.730 回答
0

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

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

基本上,您可以创建一个脚本并编写一些带有开关的别名,让您的工作变得超级简单。

于 2017-07-10T03:21:46.117 回答