Шаг Pester Provisioning PowerShell завершается неудачно на Import-DscResource в Windows Server 2016 - PullRequest
0 голосов
/ 13 марта 2020

У меня возникла проблема, из-за которой ресурсы PowerShell DS C не могут быть импортированы во время выполнения задания Packer через Azure Pipelines.

Упаковщик указывает на ошибку, говоря:

==> 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:

Сценарий установки для этой конфигурации начинается с обеспечения установки модулей. Я удалил из них оператор импорта из-за других сообщений, указывающих, что это может вызвать конфликт.

$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 вызов конфигурации DS C. Однако, несмотря на множество различных тестов, я не могу распознать установленный ресурс DS C.

Я подозреваю, что что-то со встроенными ресурсами в Windows 2016 вызывает конфликт, но я не специалист по DS C, пока не знаю, что с этим делать.

Сбой конфигурации:


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
}

Обратите внимание, это проблема для меня с другими установками DS C, которые я пытаюсь преобразовать (вместо моих доморощенных скриптов). ), и все они продолжают иметь эту проблему.

Кроме того, учитывая, что у 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

Будем благодарны за любые указания!

1 Ответ

1 голос
/ 13 марта 2020

Проблема, с которой вы сталкиваетесь, заключается в том, что конфиги DS C анализируются перед запуском любого кода в файле, даже до их загрузки в память. Если модулей не будет до запуска сценария конфигурации, произойдет сбой. Вам лучше будет установить эти модули перед запуском конфигурации, возможно, на отдельном шаге Packer.

...