仅当未安装Windows MSI软件包时,才需要通过puppet复制文件
我刚在Windows上使用puppet。 我正在尝试从网络上的共享文件夹安装MSI软件包,但请不要更改权限,共享文件夹是“只读”的,它没有“执行”权限,因此当puppet代理运行并尝试安装MS时,它会失败 我想做的是仅当需要安装包时才将MSI安装程序复制到本地目录 这就是我安装包并复制到本地目录的方式:仅当未安装Windows MSI软件包时,才需要通过puppet复制文件,windows,windows-installer,puppet,Windows,Windows Installer,Puppet,我刚在Windows上使用puppet。 我正在尝试从网络上的共享文件夹安装MSI软件包,但请不要更改权限,共享文件夹是“只读”的,它没有“执行”权限,因此当puppet代理运行并尝试安装MS时,它会失败 我想做的是仅当需要安装包时才将MSI安装程序复制到本地目录 这就是我安装包并复制到本地目录的方式: class app_install { package { '7-Zip 9.38 (x64 edition)': provider => windows,
class app_install {
package { '7-Zip 9.38 (x64 edition)':
provider => windows,
ensure => installed,
source => 'c:\\temp\7zip_testInstall.msi',
install_options => ['INSTALLDIR=C:\apps64\7-Zip'],
}
file { 'c:/temp/7zip_testInstall.msi':
ensure => 'file',
mode => '0660',
group => 'Domain Users',
source => 'c:\\temp\7zip_testInstall.msi',
}
}
当我运行puppet时,它发现包没有安装,它将文件复制到c:\temp,然后继续安装包。这是预期的行为。
在后续运行puppet代理时,它会发现包已经安装,因此会跳过安装,但如果c:\temp中缺少安装程序,则会继续将安装程序复制到c:\temp-鉴于这是一个临时文件夹,它会经常被清除
我试图避免的是在软件包已经安装的情况下复制安装程序
我不知道该怎么办
请指教,谢谢
Fr3edom21。我能够回答我的问题 我没有使用“文件资源”将MSI从网络共享复制到c:\temp,而是在缺少所述程序的卸载注册表项版本值时,通过“exec资源”执行文件复制。 像这样:
exec { 'copy MSI to c:\temp':
command => 'C:\\windows\system32\cmd.exe /c "copy \\server\repo\7zip_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,
实际上被(Windows)重定向到32位System32二进制文件所在的C:\Windows\System32
。如果您想要64位Stase32二进制文件,则应该考虑使用<代码> C:\Windows \ SySnistic < /代码>。如果您使用的是64位版本的Puppet,则不会受到此问题的影响,不应使用sysnative,因为它不存在。如果您使用的是Puppet 3.7.3+,则可以使用来处理混合环境。有关更多信息,请参阅C:\Windows\SystemWOW64
是四个不同的可能位置之一。同样,使用32位Puppet时,除非您使用的是注册表模块,否则您将受制于注册表重定向。如果该软件可以32位安装,您可能需要检查它是否也存在于HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
,如果您运行的是64位Puppet或不受注册表重定向程序的约束HKEY\U LOCAL\U MACHINE\software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Fr3edom21。木偶的常见问题。最简单的解决方法是将安装程序存储在非临时位置。谢谢Felix,我考虑过这样做,但不想在本地计算机上保留两个包的副本。一个副本作为已安装的应用程序,另一个副本作为安装程序本身。您可以尝试使用WiP模块构建此副本。请让我们知道这是否适用于您,以及如何适用于您。如果您觉得这回答了您的问题,您应该接受它作为您的答案,这通常会起作用,但是有几件事需要注意。我将编辑答案,以便您看到这些答案。这样就可以了。:)