如何使用 Azure PowerShell 在 Azure 市场中查找 Windows VM 映像

本文介绍如何使用 Azure PowerShell 在 Azure 市场中查找 VM 映像。 使用 PowerShell、资源管理器模板或其他工具以编程方式创建 VM 时,使用此信息指定市场映像。

还可以使用 Azure 市场店面、Azure 门户Azure CLI 浏览可用的映像和产品/服务。

确保已安装并配置最新的 Azure PowerShell 模块

术语

Azure 中的 Marketplace 映像具有以下属性:

  • 发布者 - 创建映像的组织。 示例:Canonical、MicrosoftWindowsServer
  • 产品/服务 - 发布者创建的一组相关映像的名称。 示例:Ubuntu Server、WindowsServer
  • SKU - 产品/服务的实例,例如分发的主要版本。 示例:16.04-LTS、2016-Datacenter
  • 版本 - 映像 SKU 的版本号。

若要在以编程方式部署 VM 时标识 Marketplace 映像,请以参数的形式单独提供这些值,或者使用某些工具接受映像 URN。 URN 将这些值合并,值之间用冒号 (:) 字符隔开:发布者:产品/服务:Sku:版本。 在 URN 中,可将版本号替换为“latest”,这会选择最新的映像版本。

如果映像发布者提供附加许可条款和购买条款,你必须接受这些条款并启用编程部署。 以编程方式部署 VM 时,还需要提供“购买计划”参数。 请参阅部署具有 Marketplace 条款的映像

常用 Windows 映像表

发布者 产品/服务 SKU
MicrosoftWindowsServer WindowsServer 2016-Datacenter
MicrosoftWindowsServer WindowsServer 2016-Datacenter-Server-Core
MicrosoftWindowsServer WindowsServer 2016-Datacenter-with-Containers
MicrosoftWindowsServer WindowsServer 2016-Nano-Server
MicrosoftWindowsServer WindowsServer 2012-R2-Datacenter
MicrosoftWindowsServer WindowsServer 2008-R2-SP1
MicrosoftDynamicsNAV DynamicsNAV 2017
MicrosoftSharePoint MicrosoftSharePointServer 2016
MicrosoftSQLServer SQL2014SP2-WS2012R2 Enterprise
MicrosoftWindowsServerHPCPack WindowsServerHPCPack 2012R2
MicrosoftWindowsServerEssentials WindowsServerEssentials WindowsServerEssentials

在某个位置查找映像的另一种方法是依次运行 Get-AzureRMVMImagePublisherGet-AzureRMVMImageOfferGet-AzureRMVMImageSku cmdlet。 可以使用这些命令确定以下值:

  1. 列出映像发布者。
  2. 对于给定的发布者,列出其产品。
  3. 对于给定的产品,列出其 SKU。

然后,对所选 SKU 运行 Get-AzureRMVMImage ,列出要部署的版本。

首先,使用以下命令列出发布者:

$locName="<Azure location, such as China North>"
Get-AzureRMVMImagePublisher -Location $locName | Select PublisherName

填写选择的发布者名称,并运行以下命令:

$pubName="<publisher>"
Get-AzureRMVMImageOffer -Location $locName -Publisher $pubName | Select Offer

填写选择的产品名称,并运行以下命令:

$offerName="<offer>"
Get-AzureRMVMImageSku -Location $locName -Publisher $pubName -Offer $offerName | Select Skus

填写选择的 SKU 名称,并运行以下命令:

$skuName="<SKU>"
Get-AzureRMVMImage -Location $locName -Publisher $pubName -Offer $offerName -Sku $skuName | Select Version

Get-AzureRMVMImage 命令的输出中,可以选择要部署新虚拟机的版本映像。

以下命令演示完整示例:

$locName="China North"
Get-AzureRMVMImagePublisher -Location $locName | Select PublisherName

部分输出:

PublisherName
-------------
...
a10networks
aiscaler-cache-control-ddos-and-url-rewriting-
alertlogic
AlertLogic.Extension
Barracuda.Azure.ConnectivityAgent
barracudanetworks
basho
boxless
bssw
Canonical
...

对于“MicrosoftWindowsServer”发布者:

$pubName="MicrosoftWindowsServer"
Get-AzureRMVMImageOffer -Location $locName -Publisher $pubName | Select Offer

输出:

Offer
-----
Windows-HUB
WindowsServer
WindowsServerSemiAnnual

对于“WindowsServer”产品/服务:

$offerName="WindowsServer"
Get-AzureRMVMImageSku -Location $locName -Publisher $pubName -Offer $offerName | Select Skus

输出:

Skus
----
2008-R2-SP1
2008-R2-SP1-zhcn
2008-R2-SP1-smalldisk
2012-Datacenter
2012-Datacenter-zhcn
2012-Datacenter-smalldisk
2012-R2-Datacenter
2012-R2-Datacenter-smalldisk
2016-Datacenter
2016-Datacenter-Server-Core
2016-Datacenter-Server-Core-smalldisk
2016-Datacenter-smalldisk
2016-Datacenter-with-Containers
2016-Datacenter-with-RDSH
2016-Nano-Server

然后,对于 2016-Datacenter SKU:

$skuName="2016-Datacenter"
Get-AzureRMVMImage -Location $locName -Publisher $pubName -Offer $offerName -Sku $skuName | Select Version

现在可以将所选发布者、产品/服务、SKU 和版本合并到 URN 中(由“:”分隔的值)。 使用 New-AzureRmVM cmdlet 创建 VM 时,使用 --image 参数传递此 URN。 记住,可选择将 URN 中的版本号替换为“latest”。 此版本始终是映像的最新版本。

如果使用资源管理器模板部署 VM,请在 imageReference 属性中单独设置映像参数。 请参阅模板参考

部署具有市场条款的映像

Azure 市场中的某些 VM 映像具有附加许可条款和购买条款,你必须接受这些条款,然后才能以编程方式部署这些映像。

若要从此类映像部署 VM,需要接受映像的条款并启用编程部署。 只需在订阅中执行一次此操作。 然后,每次以编程方式从映像部署 VM 时,还需要指定“购买计划”参数。

以下部分介绍如何执行这些操作:

  • 了解市场映像是否具有附加许可条款
  • 以编程方式接受条款
  • 以编程方式部署 VM 时提供购买计划参数

查看计划属性

若要查看映像的购买计划信息,请运行 Get-AzureRMVMImage cmdlet。 如果输出中的 PurchasePlan 属性不是 null,则映像有条款,在以编程方式部署前需要接受该条款。

例如,Windows Server 2016 Datacenter 映像没有附加条款,因为 PurchasePlan 信息为 null

$version = "2016.127.20170406"
Get-AzureRMVMImage -Location $locName -Publisher $pubName -Offer $offerName -Skus $skuName -Version $version

输出:

Id               : /Subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Providers/Microsoft.Compute/Locations/chinanorth/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-Datacenter/
                   Versions/2016.127.20170406
Location         : chinanorth
PublisherName    : MicrosoftWindowsServer
Offer            : WindowsServer
Skus             : 2016-Datacenter
Version          : 2016.127.20170406
FilterExpression :
Name             : 2016.127.20170406
OSDiskImage      : {
                     "operatingSystem": "Windows"
                   }
PurchasePlan     : null
DataDiskImages   : []

对“数据科学虚拟机 - Windows 2016”映像运行类似的命令将显示以下 PurchasePlan 属性:nameproductpublisher。 (某些映像还具有 promotion code 属性。)若要部署此映像,请参阅以下部分,以接受条款并启用编程部署。

Get-AzureRMVMImage -Location "chinanorth" -Publisher "microsoft-ads" -Offer "windows-data-science-vm" -Skus "windows2016" -Version "0.2.02"

输出:

Id               : /Subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Providers/Microsoft.Compute/Locations/chinanorth/Publishers/microsoft-ads/ArtifactTypes/VMIma
                   ge/Offers/windows-data-science-vm/Skus/windows2016/Versions/0.2.02
Location         : chinanorth
PublisherName    : microsoft-ads
Offer            : windows-data-science-vm
Skus             : windows2016
Version          : 0.2.02
FilterExpression :
Name             : 0.2.02
OSDiskImage      : {
                     "operatingSystem": "Windows"
                   }
PurchasePlan     : {
                     "publisher": "microsoft-ads",
                     "name": "windows2016",
                     "product": "windows-data-science-vm"
                   }
DataDiskImages   : []

接受条款

若要查看许可条款,请使用 Get-AzureRmMarketplaceterms cmdlet 并传入购买计划参数。 输出会提供指向市场映像条款的链接,并显示是否以前已接受条款。 请务必使用字母全部小写的参数值。 例如:

Get-AzureRmMarketplaceterms -Publisher "microsoft-ads" -Product "windows-data-science-vm" -Name "windows2016"

输出:

Publisher         : microsoft-ads
Product           : windows-data-science-vm
Plan              : windows2016
LicenseTextLink   : https://storelegalterms.blob.core.chinacloudapi.cn/legalterms/3E5ED_legalterms_MICROSOFT%253a2DADS%253a24WINDOWS%253a2DDATA%253a2DSCIENCE%253a2DV
                    M%253a24WINDOWS2016%253a24OC5SKMQOXSED66BBSNTF4XRCS4XLOHP7QMPV54DQU7JCBZWYFP35IDPOWTUKXUC7ZAG7W6ZMDD6NHWNKUIVSYBZUTZ245F44SU5AD7Q.txt
PrivacyPolicyLink : https://www.microsoft.com/EN-US/privacystatement/OnlineServices/Default.aspx
Signature         : 2UMWH6PHSAIM4U22HXPXW25AL2NHUJ7Y7GRV27EBL6SUIDURGMYG6IIDO3P47FFIBBDFHZHSQTR7PNK6VIIRYJRQ3WXSE6BTNUNENXA
Accepted          : False
Signdate          : 2/23/2018 7:43:00 PM

使用 Set-AzureRmMarketplaceterms cmdlet 接受或拒绝条款。 对于映像的每个订阅,只需接受条款一次。 请务必使用字母全部小写的参数值。 例如:


$agreementTerms=Get-AzureRmMarketplaceterms -Publisher "microsoft-ads" -Product "windows-data-science-vm" -Name "windows2016"

Set-AzureRmMarketplaceTerms -Publisher "microsoft-ads" -Product "windows-data-science-vm" -Name "windows2016" -Terms $agreementTerms -Accept

输出:

Publisher         : microsoft-ads
Product           : windows-data-science-vm
Plan              : windows2016
LicenseTextLink   : https://storelegalterms.blob.core.chinacloudapi.cn/legalterms/3E5ED_legalterms_MICROSOFT%253a2DADS%253a24WINDOWS%253a2DDATA%253a2DSCIENCE%253a2DV
                    M%253a24WINDOWS2016%253a24OC5SKMQOXSED66BBSNTF4XRCS4XLOHP7QMPV54DQU7JCBZWYFP35IDPOWTUKXUC7ZAG7W6ZMDD6NHWNKUIVSYBZUTZ245F44SU5AD7Q.txt
PrivacyPolicyLink : https://www.microsoft.com/EN-US/privacystatement/OnlineServices/Default.aspx
Signature         : XXXXXXK3MNJ5SROEG2BYDA2YGECU33GXTD3UFPLPC4BAVKAUL3PDYL3KBKBLG4ZCDJZVNSA7KJWTGMDSYDD6KRLV3LV274DLBXXXXXX
Accepted          : True
Signdate          : 2/23/2018 7:49:31 PM

使用购买计划参数进行部署

接受映像的条款后,便可以在订阅中部署 VM。 如以下代码片段中所示,使用 Set-AzureRmVMPlan cmdlet 为 VM 对象设置市场计划信息。 如需为 VM 创建网络设置和完成部署的完整脚本,请参阅 PowerShell 脚本示例

...

$vmConfig = New-AzureRmVMConfig -VMName "myVM" -VMSize Standard_D1

# Set the Marketplace plan information

$publisherName = "microsoft-ads"

$productName = "windows-data-science-vm"

$planName = "windows2016"

$vmConfig = Set-AzureRmVMPlan -VM $vmConfig -Publisher $publisherName -Product $productName -Name $planName

$cred=Get-Credential

$vmConfig = Set-AzureRmVMOperatingSystem -Windows -VM $vmConfig -ComputerName "myVM" -Credential $cred

# Set the Marketplace image

$offerName = "windows-data-science-vm"

$skuName = "windows2016"

$version = "0.2.02"

$vmConfig = Set-AzureRmVMSourceImage -VM $vmConfig -PublisherName $publisherName -Offer $offerName -Skus $skuName -Version $version
...

然后将 VM 配置与网络配置对象一起传递给 New-AzureRmVM cmdlet。

后续步骤

若要使用基本映像信息通过 New-AzureRmVM 快速创建虚拟机,请参阅使用 PowerShell 创建 Windows 虚拟机

请参阅 PowerShell 脚本示例以创建完全配置的虚拟机