为什么这个脚本资源不安装 Chocolatey 包?
Why does this script resource not install Chocolatey packages?
我正在尝试编写通过 PackageManagement(又名 OneGet)安装包的所需状态配置。包 "notepadplusplus" 来自 Chocolatey 存储库,但我想使用 PackageManagement 而不是 Chocolatey 客户端。我找不到 DSC 资源来执行此操作,所以我正在使用脚本资源。
DSC 运行无误,Notepad++ 显示在软件包列表中,但从未真正安装(Notepad++.exe
系统上没有任何位置)。
我 运行 在 Windows 10 VM 上。
这是我正在做的一个简化示例。有人发现我做错了什么吗?
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\"
由this issue in 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"
}
}
}
您可以尝试 xPowerShellExecutionPolicy resource. Install instructions here and here's a sample DSC configuration.
而不是使用脚本资源来设置执行策略
我正在尝试编写通过 PackageManagement(又名 OneGet)安装包的所需状态配置。包 "notepadplusplus" 来自 Chocolatey 存储库,但我想使用 PackageManagement 而不是 Chocolatey 客户端。我找不到 DSC 资源来执行此操作,所以我正在使用脚本资源。
DSC 运行无误,Notepad++ 显示在软件包列表中,但从未真正安装(Notepad++.exe
系统上没有任何位置)。
我 运行 在 Windows 10 VM 上。
这是我正在做的一个简化示例。有人发现我做错了什么吗?
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\"
由this issue in 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"
}
}
}
您可以尝试 xPowerShellExecutionPolicy resource. Install instructions here and here's a sample DSC configuration.
而不是使用脚本资源来设置执行策略