收集和分享 Windows PowerShell 相关教程,技术和最新动态

Azure DSC扩展新版本2.8 之 如何映射扩展依赖的下载路径


在2015年10月25日PowerShell的团队博客宣布Azure DSC Extension 2.8发布。从此支持用户在映射Azure DSC Extension下载依赖项目时,可以指定自己的路径。假如你想配置一台虚拟机,但是这台虚拟机可能由于一一些原因不允许连接互联网,那么Azure DSC Extension 2.8可以派上用场了。

本文主要演示在Azure云服务管理器中如何使用这一功能。让我们假设您已经阅读过或者了解这些知识点 如何在Azure 资源管理器(ARM)中使用WMF 4配置Azure DSC扩展如何在Azure云服务管理器(ASM)中使用WMF 4配置Azure DSC扩展

我们会直接将这一个功能添加进Azure PowerShell SDK DSC 命令扩展。当前的下载映射功能只能允许你自己构造Json数据,然后使用通用扩展命令(Set-AzureVMExtension)将它发给Azure DSC扩展。

下面的例子我们会演示:

  1. 怎样从之前的ASM例子中更新功能,来添加需要发送给Azure DSC扩展的下载映射的JSON数据。.
  2. 怎样从之前的ARM例子中更新功能,来添加需要发送给Azure DSC扩展的下载映射的JSON数据。

添加下载映射的Json数据

从之前ASM 博客中的New-XAzureVmDscExtensionJson 命令中, 使用一个哈希表来添加下载映射的参数。同时,同时我们会更新wmfVersion参数给它设置一个默认值,让它不是必选参数,这样会更方便用户使用。

[ValidateNotNullOrEmpty()]
        [ValidateSet('4.0','latest','5.0PP')]
        [string]
        $WmfVersion = 'latest',

        [AllowNull()]
        [hashtable]
        $DownloadMappings

下面来解释下载映射的参数值:

  • 哈希表中的键:
    • 下载使用的键对应格式: <PKG>_<PKGVersion>-<Platform>_<PlatformVersion>-<Arch>
      • PKG
        • WMF – 对应 WMF 包
        • NET – 对应 .NET 包
      • PKGVerion
        • 包的版本。 当前WMF有两个有效的版本,4.0 或者5.0PP(latest 会被转换成to 5.0PP.) .NET 只能有一个有效的版本,当前是 4.5.
      • Platform
        • 预留参数,以后可能会用到, 现在的值都是 `Windows’
      • `PlatformVersion’
        • Windows Server 2008 R2 – 6.1
        • Windows Server 2012 – 6.2
        • Windows Server 2012 R2 – 6.3
        • Windows Server 2016 技术预览版 – 10.0
      • Arch
        • AMD64/x64 – x64
        • x86 – x86
    • 为Windows Server 2008 R2 X64把WMF 4.0映射下载改成你自己路径的的的例子。
      • WMF_4.0-Windows_6.1-x64
  •  table的值必须是一个 HTTPS 的地址,并且不需要用户输入用户凭据(可以允许使用查询字符串)。

函数应当生成像下面这样的JSON数据。

"Properties":  {
                       "DestinationPath":  "C:\\test"
                   },
    "advancedOptions":  {
        "DownloadMappings":  {
            "WMF_4.0-Windows_6.1-x64":  "https://mystorage.blob.core.windows.net/mypubliccontainer/Windows6.1-KB2819745-x64-MultiPkg.msu"
         }
    },
    "WmfVersion":  "latest",
    "ConfigurationFunction":  "configuration.ps1\\ConfigurationName",
    "ModulesUrl":  "https://storageaccountname.blob.core.windows.net/windows-powershell-dsc/configuration.ps1.zip?<sastoken>"
}

将它们一起发送给虚拟机

我们和上一次一样把它们包在一起,包括映射下载的键和URL构造成一个哈希表,可以参考下面的例子。

$storageAccountName = 'storageaccountname'
$publisher          = 'Microsoft.Powershell'
$dscVersion         = '2.8'
$serviceName        = 'servicename'
$vmName             = 'vmName'
$moduleName         = 'configuration.ps1'
$blobName           = "$moduleName.zip"
$configurationPath  = "$PSScriptRoot\$moduleName"
$ConfigurationName  = 'ConfigurationName'

$modulesUrl = Get-XAzureDscPublishedModulesUrl -blobName $blobName -configurationPath $configurationPath `
   -storageAccountName $storageAccountName
Write-Verbose -Message "ModulesUrl: $modulesUrl" -Verbose

$PublicConfigurationJson = New-XAzureVmDscExtensionJson -moduleName $moduleName -modulesUrl $modulesUrl `
    -properties @{DestinationPath = 'C:\test'} -configurationName $ConfigurationName -DownloadMappings @{'WMF_4.0-Windows_6.1-x64' = 'https://mystorage.blob.core.windows.net/mypubliccontainer/Windows6.1-KB2819745-x64-MultiPkg.msu'}
Write-Verbose -Message "PublicConfigurationJson: $PublicConfigurationJson" -Verbose

$vm = get-azurevm -ServiceName $serviceName -Name $vmName
$vm = Set-AzureVMExtension `
        -VM $vm `
        -Publisher $publisher `
        -ExtensionName 'DSC' `
        -Version $dscVersion `
        -PublicConfiguration $PublicConfigurationJson `
        -ForceUpdate

$vm | Update-AzureVM
 在虚拟机完成更新以后,你应当有一个虚拟机来使用指定的URL下载WMF所需的扩展。我们会有一篇跟进的博客来演示如何在ARM中做这件事。

我也在 GitHub 上分享了一些示例脚本。您可能只需要更新一下服务的名称等,就可以在自己的Azure PowerShell SDK中使用了。

为ARM添加下载映射的JSON数据

在之前的博客中 ARM blog, 我有描述过如何在visual studio中创建一个ARM模板,然后选择我们要使用的WMF扩展。 我会把上一篇博客中结尾的例子拿来在这里作为开始演示:

{
    "name": "Microsoft.Powershell.DSC",
    "type": "extensions",
    "location": "[variables('location')]",
    "apiVersion": "2015-05-01-preview",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
    ],
    "tags": {
        "displayName": "Microsoft.Powershell.DSC"
    },
    "properties": {
        "publisher": "Microsoft.Powershell",
        "type": "DSC",
        "typeHandlerVersion": "2.1",
        "autoUpgradeMinorVersion": true,
        "settings": {
            "modulesUrl": "[concat(parameters('_artifactsLocation'), '/', 'dsc.zip')]",
            "sasToken": "[parameters('_artifactsLocationSasToken')]",
            "configurationFunction": "[variables('Microsoft.Powershell.DSCConfigurationFunction')]",
            "wmfVersion": "4.0",
            "properties": {
                "nodeName": "[variables('vmName')]"
            }
        },
        "protectedSettings": { }
    }
}

在 modulesUrl后面添加下面的JSON

"advancedOptions":  {
        "DownloadMappings":  {
            "WMF_4.0-Windows_6.1-x64":  "https://mystorage.blob.core.windows.net/mypubliccontainer/Windows6.1-KB2819745-x64-MultiPkg.msu"
         }
    },
 这样会生成下面的JSON
{
    "name": "Microsoft.Powershell.DSC",
    "type": "extensions",
    "location": "[variables('location')]",
    "apiVersion": "2015-05-01-preview",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
    ],
    "tags": {
        "displayName": "Microsoft.Powershell.DSC"
    },
    "properties": {
        "publisher": "Microsoft.Powershell",
        "type": "DSC",
        "typeHandlerVersion": "2.1",
        "autoUpgradeMinorVersion": true,
        "settings": {
            "modulesUrl": "[concat(parameters('_artifactsLocation'), '/', 'dsc.zip')]",
            "advancedOptions":  {
                "DownloadMappings":  {
                    "WMF_4.0-Windows_6.1-x64":  "https://mystorage.blob.core.windows.net/mypubliccontainer/Windows6.1-KB2819745-x64-MultiPkg.msu"
                }
            },
            "sasToken": "[parameters('_artifactsLocationSasToken')]",
            "configurationFunction": "[variables('Microsoft.Powershell.DSCConfigurationFunction')]",
            "wmfVersion": "4.0",
            "properties": {
                "nodeName": "[variables('vmName')]"
            }
        },
        "protectedSettings": { }
    }
}

具体在部署的时候可以参考之前博客中的例子,我已经把它们更新在 GitHub 上面了.

反馈

欢迎大家在这里Connect进行反馈.

本文链接: https://www.pstips.net/azure-dsc-extension-2-8.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注