我正在使用Puppet Enterprise版本3.8.6来管理Windows服务器。 我试图将Powershell执行策略设置为idempodent。我测试了几个假设,最后一个是:
# Setting Powershell Execution Policy to unrestricted
exec { 'Set PowerShell execution policy unrestricted':
command => 'Set-ExecutionPolicy Unrestricted',
unless => 'if ((Get-ExecutionPolicy).ToString().Equals("Unrestricted")) { exit 0 } else { exit 1 }',
provider => powershell
}
我已经使用双引号和引号进行测试,甚至在无限制词上转义双引号(例如\“Unrestricted \”)。 我也测试了命令,但没有成功:
(Get-ExecutionPolicy).ToString(). -eq "Unrestricted"
它将ExecutionPolicy更改为Unrestricted,但在每个Puppet运行中。它继续落入else子句中。该命令适用于Powershell。 我希望它只在需要时应用。
仅供参考:我已经检查了Puppet文档并搜索了onlne。 我查了一些链接: http://glennsarti.github.io/blog/powershell-puppet-module-exit-codes/ https://docs.puppet.com/pe/latest/windows_config_mgmnt.html#executing-arbitrary-powershell-code
答案 0 :(得分:1)
我认为这是由于PowerShell模块调用PowerShell的方式 - 它传递-ExecutionPolicy Bypass
as part of the powershell.exe startup arguments,因此本地范围将始终返回Bypass,从而导致它在每次都失败。
尝试将-Scope LocalMachine
添加到您的除外语句中。
# Setting Powershell Execution Policy to unrestricted
exec { 'Set PowerShell execution policy unrestricted':
command => 'Set-ExecutionPolicy Unrestricted',
unless => 'if ((Get-ExecutionPolicy -Scope LocalMachine).ToString() -eq "Unrestricted") { exit 0 } else { exit 1 }',
provider => powershell
}