我遇到了一个问题,在通过PowerShell管道运行打包程序作业期间,Azure DSC资源无法导入。
Packer表示以下错误:
==> amazon-ebs: Provisioning with Powershell...
==> amazon-ebs: Provisioning with powershell script: ./scripts/dsc-windows-powershell-policy.ps1
==> amazon-ebs: At C:\Windows\Temp\script-5e6ad1c0-dea6-f683-86ea-f173e577e85d.ps1:24 char:5
==> amazon-ebs: + Import-DscResource -ModuleName ComputerManagementDsc # -ModuleVer ...
==> amazon-ebs: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
==> amazon-ebs: Could not find the module 'ComputerManagementDsc'.
==> amazon-ebs: At C:\Windows\Temp\script-5e6ad1c0-dea6-f683-86ea-f173e577e85d.ps1:28 char:9
==> amazon-ebs: + PowerShellExecutionPolicy ExecutionPolicy
==> amazon-ebs: + ~~~~~~~~~~~~~~~~~~~~~~~~~
==> amazon-ebs: Undefined DSC resource 'PowerShellExecutionPolicy'. Use Import-DSCResource to import the resource.
==> amazon-ebs: + CategoryInfo : ParserError: (:) [], ParseException
==> amazon-ebs: + FullyQualifiedErrorId : ModuleNotFoundDuringParse
==> amazon-ebs:此配置的设置脚本首先确保模块已安装。我从他们那里删除了import语句,因为其他帖子表明它可能会导致某种类型的冲突。
$ErrorActionPreference = 'Stop'
@(
'PSDscResources'
'ComputerManagementDsc'
) | ForEach-Object {
$m = $_
if(-not (Get-InstalledModule $m))
{
Write-Host "Installing Module: $m"
Find-Module -Name $m -Repository PSGallery | Install-Module -Scope AllUsers -Force -AllowClobber
}
else
{
Write-Host "Bypassed install of $m per already installed"
}
}安装完成后,我在同一个ps1中运行DSC配置的调用。然而,尽管有许多不同的测试,我还是不能让它识别安装的DSC资源。
我怀疑Windows 2016的内置资源是否导致了冲突,但我还不是DSC专家,还不知道该怎么做。
失败的配置是:
Configuration DSC_PowerShellExecutionPolicy_config
{
Import-DscResource -ModuleName ComputerManagementDsc -ModuleVersion 8.0.0
node 'localhost'
{
PowerShellExecutionPolicy ExecutionPolicy
{
ExecutionPolicy = 'RemoteSigned'
ExecutionPolicyScope = 'LocalMachine'
}
}
}
try
{
Write-Host "⚙ Initiating DSC_PowerShellExecutionPolicy_config"
DSC_PowerShellExecutionPolicy_config
Start-DscConfiguration DSC_PowerShellExecutionPolicy_config -Verbose -force -Wait
}
catch
{
throw
exit 1
}注意,这对我来说是一个问题,因为我正在尝试转换其他DSC安装(而不是我自己开发的脚本),并且所有这些安装都会遇到这个问题。
此外,考虑到我正在测试的Windows Server 2016镜像没有最新的nuget和PowerShellGet,我确保到目前为止是最新的版本:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module PowerShellGet -MinimumVersion 2.2.3 -Force -Scope AllUsers -AllowClobber
Import-Module PowershellGet -MinimumVersion 2.2.3 -Force -verbose任何指导都将不胜感激!
发布于 2020-03-14 02:50:42
您看到的问题是,DSC配置在运行文件中的任何代码之前解析,甚至在将它们加载到内存之前也是如此。如果模块在配置脚本运行之前不在那里,那么它将失败。最好在运行配置之前安装这些模块,可能是在单独的打包步骤中。
https://stackoverflow.com/questions/60675627
复制相似问题