如何使用Puppet动态选择基于32/64位操作系统的System文件夹路径

时间:2015-06-08 11:47:25

标签: windows puppet puppet-enterprise

我正在使用Puppet在Windows 2008 Server R2上自动部署我的Web应用程序。

我将在几个步骤中访问System文件夹(System32或SysWOW64,具体取决于32/64位操作系统)。

让我采取以下步骤之一:我将访问'appcmd.exe'到开始/停止网站。当脚本在32位计算机上运行时,我需要访问'C:/Windows/System32/inetsrv/appcmd.exe'处的文件,当脚本在64位计算机上运行时,我需要访问'C:/Windows/SysWOW64/inetsrv/appcmd.exe'处的文件

以下是我编写的脚本部分。我不想硬编码路径。根据操作系统,我希望选择“appcmd.exe”的路径。我怎样才能做到这一点?

exec {"StopWebsite": command=> 'C:/Windows/System32/inetsrv/appcmd.exe stop site /site.name:"Default Web Site"' }

1 个答案:

答案 0 :(得分:1)

不要过多地抛弃你,但你看过puppet-iis模块(以前是OpenTable的IIS模块)吗?

如何使用32位应用程序(如果可用)

要回答您的问题,这是我第一次听到要求转到32位应用程序的请求。以下应适用于32位和64位操作系统上的32或64位Puppet:

exec {'StopWebsite': 
  path    => 'C:/Windows/SysWOW64/inetsrv;C:/Windows/System32/inetsrv',
  command => 'appcmd.exe stop site /site.name:"Default Web Site"',
}

它之所以有效是因为它会先在C:\Windows\SysWOW64中检查命令,然后再转到C:\Windows\system32。这允许它在运行时落到正确的32位appcmd.exe

如何使用64位应用程序(如果可用)

对于其他人,如果您总是尝试使用64位进程和Puppet 3.7.3或更高版本,请使用$system32这一事实。无论您使用的是64位还是32位版本的Puppet,都可以使用。

exec {'somefunction': 
  command => "$system32\\cmd.exe /c some command",
}

或者您也可以尝试相反的技巧,设置路径顺序,以便在回退到system32时首先获得sysnative。

exec {'somefunction': 
  path    => 'C:/Windows/sysnative;C:/Windows/System32',
  command => 'cmd.exe /c some command',
}

保持其余路径完整

如果您需要保留路径的其余部分,只需将$path附加到字符串的末尾,但使用双引号指定它​​:

path => "C:\\Windows\\sysnative;C:\\Windows\\System32;$::path",

你可能会使用正斜杠,但$path的其余部分会带有反斜杠,所以我不想混淆处理程序。