如何使用资源管理器模块停止所有 Azure 自动化虚拟机?
How to stop all VMs with Azure Automation using Resource Manager module?
我已经使用新的资源管理器创建了一些 Azure VM,我想每天停止它们。
为此,我发布了一个 runbook 来停止经典和 ARM VM,并且我创建了一个每晚运行 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 自动化帐户:
但是我收到了这个错误:
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,请参阅此 post 了解有关 ARM supported by default on Azure Automation[ 的更多信息=15=]
据我了解,ASM 模式是默认模式。如果您要使用 ARM 命令,首先需要使用 Switch-AzureMode
切换模式
另一个困惑是Get-AzureRMVM
命令的目的是什么。我用谷歌搜索但找不到任何东西 -
Get-AzureRMVM cmdlet 在 AzureRM.Compute 模块中...AzureRM* cmdlet 仍处于预览阶段,我认为它们在 Azure 自动化中不可用。
上面屏幕截图中的两个模块可能对应于 cmdlet 的 0.9.x 版本,并且在 Switch-AzureMode 后面确实有两个不同的模块(Azure=ASM 和 AzureResourceManager=ARM)。 Switch-AzureMode 只是卸载一个并加载另一个。
如果 Automation 仍在使用 0.9.x 版本的 cmdlet,那么您应该能够使用 AzureResourceManager 模块将 Get-AzureVM 用于 ARM VM。
您似乎将旧版本的 ARM cmdlet(Azure PS 1.0 之前)导入了 Azure 自动化。这是在 *-AzureRm*
重命名之前。所以 tt 应该是 Stop-AzureVM
而不是 Stop-AzureRmVM
.
然而,这使得您是否正在尝试调用 Azure 服务管理或 Azure 资源管理器 cmdlet 变得模棱两可——这正是 cmdlet 名称在 Azure PS 1.0 中重命名的原因。我建议您遵循指导 here.
下面是解决方案
$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-AzureRmSubscription 而不是标准的 Add-AzureAccount 和 Select-AzureSubscription。
我认为我们的 Azure 帐户的身份验证过程是相同的。
以下代码适用于旧式和新式 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
}
对于新的 Azure RM VM,使用以下命令访问扩展:
Set-AzureRmVMAccessExtension -ResourceGroupName "ResourceGroupName" -VMName "VMName" -Username "Admin User Name" -Password "Admin Password" -Name "Extension Name"
请注意-Name
参数是任意扩展名。
这可能会迟到,但我建议您看看这个 link:
https://www.attosol.com/start-or-stop-all-vms-of-a-resource-group-in-azure/
基本上,您可以创建一个脚本并使用开关编写一些别名,让您的工作变得超级简单。
我已经使用新的资源管理器创建了一些 Azure VM,我想每天停止它们。
为此,我发布了一个 runbook 来停止经典和 ARM VM,并且我创建了一个每晚运行 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 自动化帐户:
但是我收到了这个错误:
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,请参阅此 post 了解有关 ARM supported by default on Azure Automation[ 的更多信息=15=]
据我了解,ASM 模式是默认模式。如果您要使用 ARM 命令,首先需要使用 Switch-AzureMode
另一个困惑是Get-AzureRMVM
命令的目的是什么。我用谷歌搜索但找不到任何东西 -
Get-AzureRMVM cmdlet 在 AzureRM.Compute 模块中...AzureRM* cmdlet 仍处于预览阶段,我认为它们在 Azure 自动化中不可用。
上面屏幕截图中的两个模块可能对应于 cmdlet 的 0.9.x 版本,并且在 Switch-AzureMode 后面确实有两个不同的模块(Azure=ASM 和 AzureResourceManager=ARM)。 Switch-AzureMode 只是卸载一个并加载另一个。
如果 Automation 仍在使用 0.9.x 版本的 cmdlet,那么您应该能够使用 AzureResourceManager 模块将 Get-AzureVM 用于 ARM VM。
您似乎将旧版本的 ARM cmdlet(Azure PS 1.0 之前)导入了 Azure 自动化。这是在 *-AzureRm*
重命名之前。所以 tt 应该是 Stop-AzureVM
而不是 Stop-AzureRmVM
.
然而,这使得您是否正在尝试调用 Azure 服务管理或 Azure 资源管理器 cmdlet 变得模棱两可——这正是 cmdlet 名称在 Azure PS 1.0 中重命名的原因。我建议您遵循指导 here.
下面是解决方案
$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-AzureRmSubscription 而不是标准的 Add-AzureAccount 和 Select-AzureSubscription。
我认为我们的 Azure 帐户的身份验证过程是相同的。
以下代码适用于旧式和新式 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
}
对于新的 Azure RM VM,使用以下命令访问扩展:
Set-AzureRmVMAccessExtension -ResourceGroupName "ResourceGroupName" -VMName "VMName" -Username "Admin User Name" -Password "Admin Password" -Name "Extension Name"
请注意-Name
参数是任意扩展名。
这可能会迟到,但我建议您看看这个 link:
https://www.attosol.com/start-or-stop-all-vms-of-a-resource-group-in-azure/
基本上,您可以创建一个脚本并使用开关编写一些别名,让您的工作变得超级简单。