Puppet Windows 包提供程序编码错误

Puppet Windows Package Provider Encoding Error

我有一个 Windows 的 Puppet 清单,用于(除其他外)下载和安装 Python。它曾经工作得很好。现在,每当它尝试处理 MSI 文件时,它都会给我与字符串编码相关的奇怪错误。清单的相关部分是:

(注意:我正在使用 pget 下载 MSI。)

# Prepare to download things

$downloads = "C:\puppet-downloads"

file { $downloads:
    ensure => directory
}
Pget {
    require => File[$downloads],
    target  => $downloads,
}

$python      = 'python'
$py_version  = '2.7.10'
$py_dir      = "C:\Python27"
$py_msi      = "python-${py_version}.msi"
$py_msi_path = "${downloads}\${py_msi}"

pget {'python-msi':
    source => "https://www.python.org/ftp/python/${py_version}/${py_msi}",
}

package {$python:
   require  => Pget['python-msi'],
   provider => 'windows',
   source   => $py_msi_path,
   ensure   => $py_version,
}

并且错误输出:

Error: Could not prefetch package provider 'windows': U+2122 to IBM437 in conversion from UTF-16LE to UTF-8 to IBM437

Error: /Package[python]: Could not evaluate: U+2122 to IBM437 in conversion from UTF-16LE to UTF-8 to IBM437

我发现了什么:

Debug: Runtime environment: puppet_version=3.7.5, ruby_version=2.1.5, run_mode=user, default_encoding=IBM437

看起来确实有一张票:https://tickets.puppetlabs.com/browse/PUP-4333

看起来问题是已经安装了不兼容字符的包,它会尝试预取已安装的包:

目前的解决方法(来自票证):

  • 运行 "wmic product get name"
  • 查找具有非 ascii 字符的字符
  • 从注册表中删除外观古怪的字符

运行 chcp 65001 命令提示符会将您的控制台编码更改为 UTF-8。

虽然我不知道这将如何适应您的工作流程。

我的一台基础设施笔记本电脑也遇到了类似的问题,这是唯一一台安装了 Skype™ 7.0 的笔记本电脑。我在注册表中进行了搜索,并从具有 DisplayName 或 ProductName 的每个键中删除了该 TM。有效。但是我备份以防万一。所以我确认你可以检查你安装的程序名称中是否有这个字符,所以你可以在 Windows 注册表中删除。不过要小心。