我试图编写一个通过PackageManagement(又名OneGet)安装软件包的所需状态配置。包#34; 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 = { @{} }
}
}
}
以下是我在虚拟机上的表现
. .\dscConfig.ps1
BuildProvisioning
winrm quickconfig -quiet
Start-DscConfiguration -Verbose -Force -Wait -ComputerName "localhost" -Path ".\BuildProvisioning\"
答案 0 :(得分:0)
由this issue in OneGet引起,您必须通过Set-ExecutionPolicy启用scrips或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资源,而不是使用脚本资源来设置执行策略。 Install instructions here和here's a sample DSC configuration。