仅当未安装 Windows MSI 软件包时才需要通过 puppet 复制文件

Need to copy a file via puppet only if a Windows MSI package is not installed

我是 Windows 上使用 puppet 的新手。 我正在尝试从我们网络上的共享文件夹安装 MSI 程序包,但是要执行权限,共享文件夹只有 "read",它没有 "execute" 权限,所以当人偶代理 运行s 并尝试安装 MS,但失败了。

我想做的是仅在需要安装软件包时将 MSI 安装程序复制到本地目录。

这就是我安装包并将其复制到本地目录的方式:

class app_install {
    package { '7-Zip 9.38 (x64 edition)':
        provider => windows,
        ensure   => installed,
        source => 'c:\tempzip_testInstall.msi',
        install_options => ['INSTALLDIR=C:\apps64-Zip'],
    }
    file { 'c:/temp/7zip_testInstall.msi':
        ensure => 'file',
        mode   => '0660',
        group  => 'Domain Users',
        source => 'c:\tempzip_testInstall.msi',
     }

}

当我 运行 puppet 发现包未安装时,它会将文件复制到 c:\temp,然后继续安装包。这是预期的行为。 在 puppet 代理的后续 运行s 中,它发现该包已经安装,因此它跳过安装,但如果 c:\ 中缺少安装程序,则继续将安装程序再次复制到 c:\temp temp - 考虑到这是一个临时文件夹,它会经常被清除。

我试图避免的是在软件包已经安装的情况下复制安装程序。

我不知道该怎么做。

请指教,谢谢!

Fr3edom21.

我能够回答我的问题。

我没有使用 "file resource" 将 MSI 从网络共享复制到 c:\temp,而是仅在卸载注册表项版本值时通过 "exec resource" 执行文件复制因为缺少该程序。 像这样:

exec { 'copy MSI to c:\temp':
command => 'C:\windows\system32\cmd.exe /c "copy \server\repozip_testinstall.msi c:\temp"',
unless => 'C:\Windows\System32\reg.exe query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{23170F69-40C1-2702-0938-00000100000 /f 9.38.00.0',
}

我希望这对遇到类似问题的人有所帮助。

如果您选择这条路线,需要考虑以下几点:

  • 如果您在 64 位机器上使用 32 位版本的 Puppet,C:\Windows\System32 实际上会被重定向(通过 Windows' File System Redirector) to C:\Windows\SystemWOW64 where the 32-bit system32 binaries live. If you want the 64-bit system32 binaries, you should consider using c:\Windows\sysnative. If you are on the 64-bit version of Puppet, you don't fall subject to this issue and should not use sysnative as it doesn't exist. If you are on Puppet 3.7.3+, you can use the $system32 fact to handle mixed environments. For more information see Handling File Paths on Windows.
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 是四个不同的可能位置之一。再次使用 32 位 Puppet,除非您使用注册表模块,否则您将受到注册表重定向的影响。如果该软件可以安装为 32 位,您可能需要检查它是否也存在于 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall 以及您是否 运行 64 位 Puppet 或不受注册表重定向器的约束。

Fr3edom21.