为什么这个脚本资源不安装Chocolatey包?



我试图写一个所需的状态配置,通过packagmanagement(又名OneGet)安装一个包。软件包"notepadplusplus"来自Chocolatey存储库,但我想使用packagmanagement而不是Chocolatey客户端。我找不到DSC资源来做这件事,所以我使用脚本资源。

DSC运行没有错误,notepad++显示在软件包列表中,但从未实际安装(Notepad++.exe在系统上无处可去)。

我用的是Windows 10虚拟机

下面是我正在做的一个简化的例子。有人发现我哪里做错了吗?

dscConfig.ps1

Configuration BuildProvisioning
{
    param(
        [string[]]$computerName="localhost"
    )
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Node $computerName
    {
        Script PackageManagementTest
        {
            SetScript = {
                Get-PackageProvider NuGet -Force | Out-Null
                Get-PackageProvider Chocolatey -Force | Out-Null
                Install-Package notepadplusplus -Force
            }
            TestScript = { $false }
            GetScript  = { @{} }
        }
    }
}

我是这样在VM上启动的

. .dscConfig.ps1
BuildProvisioning
winrm quickconfig -quiet
Start-DscConfiguration -Verbose -Force -Wait -ComputerName "localhost" -Path ".BuildProvisioning"

这是由OneGet中的这个问题引起的,您必须通过Set-ExecutionPolicy启用脚本或OneGet在报告成功时失败。即使在启动DSC之前设置了执行策略,也会发生这种情况。它必须在您的DSC配置中设置。显然,它运行在一个不继承执行策略的新会话中。

下面是我在安装包之前设置执行策略的一个简单修复:

Configuration BuildProvisioning
{
    param(
        [string[]]$computerName="localhost"
    )
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Node $computerName
    {
        Script ExecutionPolicy
        {
            SetScript = {
                Set-ExecutionPolicy RemoteSigned -Force
            }
            TestScript = { $false }
            GetScript  = { @{} }
        }
        Script PackageManagementTest
        {
            SetScript = {
                Get-PackageProvider NuGet -Force | Out-Null
                Get-PackageProvider Chocolatey -Force | Out-Null
                Install-Package notepadplusplus -Force
            }
            TestScript = { $false }
            GetScript  = { @{} }
            DependsOn = "[Script]ExecutionPolicy"
        }
    }
}

与其使用Script资源来设置执行策略,不如尝试使用xPowerShellExecutionPolicy资源。这里是安装说明,这里是DSC配置示例。

最新更新