如何通过Puppet exec命令设置Powershell ExecutionPolicy,除非Windows上的属性?

时间:2016-11-14 15:46:32

标签: windows powershell exec puppet

我正在使用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

1 个答案:

答案 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
 }