Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何使用DSC在Azure VM中安装公钥证书_Powershell_Azure Resource Manager - Fatal编程技术网

Powershell 如何使用DSC在Azure VM中安装公钥证书

Powershell 如何使用DSC在Azure VM中安装公钥证书,powershell,azure-resource-manager,Powershell,Azure Resource Manager,我想使用ARM将公钥证书安装到Azure VM规模集中,但在获取证书的本地路径时遇到问题 可以使用PowerShell DSC扩展为VM ScaleSet安装证书并使用DSC模块 我正在使用此代码示例: Configuration Example { param ( [Parameter()] [string[]] $NodeName = 'localhost' ) Import-DscResource -Modu

我想使用ARM将公钥证书安装到Azure VM规模集中,但在获取证书的本地路径时遇到问题

可以使用PowerShell DSC扩展为VM ScaleSet安装证书并使用DSC模块

我正在使用此代码示例:

Configuration Example
{
    param
    (
        [Parameter()]
        [string[]]
        $NodeName = 'localhost'
    )

    Import-DscResource -ModuleName xCertificate

    Node $AllNodes.NodeName
    {
        xCertificateImport MyTrustedRoot
        {
            Thumbprint = 'c81b94933420221a7ac004a90242d8b1d3e5070d'
            Location   = 'LocalMachine'
            Store      = 'Root'
            Path       = '.\Certificate\MyTrustedRoot.cer'
        }
    }
}
我正在使用cmdlet将DSC脚本和公钥证书打包并上载到Azure存储帐户,以便将其用作ARM部署过程的一部分

但是我不知道如何解析证书的本地路径,我在使用
\Certificate\MyTrustedRoot.cer
$PSScriptRoot\Certificate\MyTrustedRoot.cer

我认为可以在DSC中解析文件或使用相对路径,以保持DSC配置的简单性,并将其与证书打包在一起

更新:Publish AzureRMVMDSCCConfiguration将DSC脚本和公钥证书压缩并上载到azure存储帐户。VMS DSC扩展下载zip,在vm上本地解压并运行DSC,因此证书在scaleset中的所有vm上本地存在


但是由于所使用的DSC模块的版本号,证书的路径是不确定的。

证书不是本地存在的,它只存在于存储帐户中。因此,需要使用artifactsLocation和artifactsLocationSasToken值将存储中证书的路径作为参数传递给uri

但这些是您可以从arm模板部署中获得的值。由于您只是使用powershell发布您的DSC plus资源,因此您应该能够确定证书的uri是什么。将存储帐户指定为publish cmdlet的参数,因此应该能够使用该信息构建uri。再次检查存储帐户中证书的uri

或者,在VM上使用自定义脚本扩展将证书从存储器下载到VM,然后证书将在本地存在


你是在powershell里这么做的吗?您可能想看看如何使用arm模板来实现这一点。例如:

在Azure虚拟机上本地,DSC文件和证书的路径位于DSC扩展工作文件夹下的某个位置,该文件夹从发布AzureRMVMDSCCConfigurationcmdlet创建的zip包中提取,例如

C:\Packages\Plugins\Microsoft.Powershell.DSC\2.23.0.0\DSCWork\InstallRootCaCert.ps1.0\Certificate\MyTrustedRoot.cer


我能想到的最佳解决方案是使用证书的绝对路径,通过在ARM模板中将typeHandlerVersion显式设置为2.23,并将autoUpgradeMinorVersion设置为false

锁定DSC版本号,它确实存在于本地,由于我在Publish-AzureRmVMDscConfiguration cmdlet中使用了-addationalPath参数,因此所有内容都被很好地压缩,上载到azure存储帐户,并通过VMS DSC扩展下载和解压缩到VM。所以我只需要在本地引用.cer文件。甚至使用RDP登录并找到文件,但路径不确定。我知道我可以使用自定义脚本扩展名,但我更喜欢DSC方法,如果我能够确定证书的位置,这应该是可能的,使用相对路径或某些可以作为参数传递到DSC函数的环境变量。证书放在磁盘上的位置-我非常确定Azure DSC扩展提取到已知路径。。。