使用单个 PowerShell 命令在经典和 ARM VM 上安装扩展
Install extension on both Classic and ARM VMs with single PowerShell command
我有一个脚本可以将 OMS 扩展安装到订阅中的所有 ARM VM。问题是我有仅包含 ARM VM 的订阅、仅包含经典 VM 的订阅以及具有两种类型 VM 的订阅。如何修改脚本以在所有条件下工作?脚本是:
#This script installs OMS Monitoring Agent to all VMs in the selected Subscription.
#Before running this script, the user must login to Azure account and select target subscription.
#Example:
#Login-AzureRmAccount
#Select-AzureRmSubscription 'SubscriptionName'
$WorkspaceID = 'Provide Workspace ID here'
$WorkspaceKey = 'Provide Workspace key here'
$VMs = Get-AzureRmVM
$VMs.where({$_.osprofile.windowsconfiguration}) | ForEach-Object {
"Installing Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent Extension: {0}" -f $_.id
Set-AzureRmVMExtension -ResourceGroupName $_.ResourceGroupName -VMName $_.Name -Name omsAgent -Publisher 'Microsoft.EnterpriseCloud.Monitoring' `
-ExtensionType 'MicrosoftMonitoringAgent' -AsJob -TypeHandlerVersion '1.0' -Location $_.Location -ForceRerun 'yesh' `
-SettingString ( "{'workspaceId': '$WorkspaceID'}") `
-ProtectedSettingString "{'workspaceKey': '$WorkspaceKey'}" |
Add-Member -Name VM -Value $_.Id -MemberType NoteProperty
}
由于您同时拥有经典 VM 和 ARM VM,因此您拥有两种不同的部署模型,因此您使用的是两种不同的 PowerShell 模块。
换句话说,你需要为每个单独登录并有单独的脚本来使用它们。
在经典模型中,您需要运行以下 cmdlet 来登录和访问您的 VM:
Add-AzureAccount
Get-AzureVM | Set-AzureVMExtension ``
-Publisher 'Microsoft.EnterpriseCloud.Monitoring' ``
-ExtensionName 'MicrosoftMonitoringAgent' ``
-Version '1.*' ``
-PublicConfiguration "<workspace id>" ``
-PrivateConfiguration "<workspace key>" ``
在搜索信息时我找到了 this 脚本。它是来自单个或多个订阅的 on-boarding 个虚拟机的脚本,使用两种部署模型。
我有一个脚本可以将 OMS 扩展安装到订阅中的所有 ARM VM。问题是我有仅包含 ARM VM 的订阅、仅包含经典 VM 的订阅以及具有两种类型 VM 的订阅。如何修改脚本以在所有条件下工作?脚本是:
#This script installs OMS Monitoring Agent to all VMs in the selected Subscription.
#Before running this script, the user must login to Azure account and select target subscription.
#Example:
#Login-AzureRmAccount
#Select-AzureRmSubscription 'SubscriptionName'
$WorkspaceID = 'Provide Workspace ID here'
$WorkspaceKey = 'Provide Workspace key here'
$VMs = Get-AzureRmVM
$VMs.where({$_.osprofile.windowsconfiguration}) | ForEach-Object {
"Installing Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent Extension: {0}" -f $_.id
Set-AzureRmVMExtension -ResourceGroupName $_.ResourceGroupName -VMName $_.Name -Name omsAgent -Publisher 'Microsoft.EnterpriseCloud.Monitoring' `
-ExtensionType 'MicrosoftMonitoringAgent' -AsJob -TypeHandlerVersion '1.0' -Location $_.Location -ForceRerun 'yesh' `
-SettingString ( "{'workspaceId': '$WorkspaceID'}") `
-ProtectedSettingString "{'workspaceKey': '$WorkspaceKey'}" |
Add-Member -Name VM -Value $_.Id -MemberType NoteProperty
}
由于您同时拥有经典 VM 和 ARM VM,因此您拥有两种不同的部署模型,因此您使用的是两种不同的 PowerShell 模块。
换句话说,你需要为每个单独登录并有单独的脚本来使用它们。
在经典模型中,您需要运行以下 cmdlet 来登录和访问您的 VM:
Add-AzureAccount
Get-AzureVM | Set-AzureVMExtension ``
-Publisher 'Microsoft.EnterpriseCloud.Monitoring' ``
-ExtensionName 'MicrosoftMonitoringAgent' ``
-Version '1.*' ``
-PublicConfiguration "<workspace id>" ``
-PrivateConfiguration "<workspace key>" ``
在搜索信息时我找到了 this 脚本。它是来自单个或多个订阅的 on-boarding 个虚拟机的脚本,使用两种部署模型。