2

我正在尝试使用 Team City 和 Powershell 内联脚本远程安装 Puppet Client for Windows。

Invoke-command –computername %Machine Host Name% –ScriptBlock {Param($options) Start-Process -FilePath "msiexec.exe $options" -ArgumentList "/i C:\Temp\puppet-3.0.0.msi PUPPET_MASTER_SERVER=%Puppet Master Server% /l*v C:\Temp\puppet-3.0.0.log /qn" -Wait –Passthru}

当我从本地机器执行时,它工作得很好,但似乎 TeamCity 在处理引号方面存在一些问题。

**[Step 2/2] Invoke-Command : A positional parameter cannot be found that accepts argument '
[09:08:08][Step 2/2] –ScriptBlock'.
[09:08:08][Step 2/2] At line:1 char:15
[09:08:08][Step 2/2] + Invoke-command <<<<  –computername vavp-pmo-agt08 –ScriptBlock {Param($option
[09:08:08][Step 2/2] s) Start-Process -FilePath msiexec.exe $options -ArgumentList /i C:\Temp\puppet
[09:08:08][Step 2/2] -3.0.0.msi PUPPET_MASTER_SERVER=vavt-pmo-sbx23.company.com /l*v C:\Temp\puppet
[09:08:08][Step 2/2] -3.0.0.log /qn -Wait –Passthru}
[09:08:08][Step 2/2]     + CategoryInfo          : InvalidArgument: (:) [Invoke-Command], Parameter 
[09:08:08][Step 2/2]    BindingException
[09:08:08][Step 2/2]     + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell 
[09:08:08][Step 2/2]    .Commands.InvokeCommandCommand
[09:08:08][Step 2/2]  
[09:08:08][Step 2/2] Process exited with code 1**

脚本执行模式开关也没有运气。

4

3 回答 3

1
Invoke-command -computername %puppet.client.host% -ScriptBlock {Param($options) Start-Process -Wait -Passthru -FilePath "msiexec.exe $options" -ArgumentList "/i C:\Temp\puppet-3.0.0.msi PUPPET_MASTER_SERVER=%env.puppet.master% /l*v C:\Temp\puppet-3.0.0.log /qn"}
于 2012-11-09T18:49:46.513 回答
1

这就是我通过 GPO 完成的方式。

Windows 上的木偶:

修改 msi 以包含 Puppet 服务器参数,以便您可以通过 GPO 分发它:

1 download puppet gpl client for windows, which is a msi file 2 install Orca from MS , it is ...
2 install Orca from MS , it is free
3 whith Orca, edit the Msi
4. go to the Property categ, you will see there the Puppet server value
5. edit and save
6. create the gpo to distribute it. Remember that computer soft installs on reboot.
于 2012-11-21T10:23:00.873 回答
1

您是否尝试过在 powershell 中使用 wmi 方法?

 $localcommand="\\$TargetServer"+"\root\cimv2:Win32_Product"

 $msi = [wmiclass]"$localcommand"
 $result=$msi.Install('Path to yourmsi\Yourmsi-1.0.0.msi', "quiet=true", $true)

对我有用(也在teamcity中)。

于 2012-11-06T15:07:41.123 回答