Марионетка не запущение скрипта PowerShell на сервере Windows 2008

Марионеточный агент в моем Windows VMs не выполняет сценарии PowerShell. Я протестировал его с очень простым сценарием также. Сценарий хранится на диске C как тест ps1. Его содержание следующие:

"$(Get-Date -format F)" | Out-File C:\z.txt -Encoding ASCII

Когда я выполняю это как./test.ps1 от консоли PowerShell вручную, она хорошо работает, и файл z.txt создается. Но по некоторым причинам Марионеточный агент не выполняет это. Содержание моего site.pp:

exec { "Run Script":
        command => 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Executionpolicy Unrestricted -File c:/test.ps1',
        logoutput => true,
        refreshonly => true,
}

И вывод "марионеточного агента-t" от самого VM:

C:\Users\Administrator>puppet agent -t
Info: Retrieving pluginfacts
Warning: Copying owner/mode/group from the source file on Windows is deprecated;
 use source_permissions => ignore.
   (at C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/type/file/sou
rce.rb:120:in `each')
Info: Retrieving plugin
Info: Caching catalog for f9881998-7fdf-4e96-a784-d9690fcd5495
Info: Applying configuration version '1410182959'
Notice: Finished catalog run in 0.42 seconds

Таким образом, мне кажется, что нет никакой ошибки нигде, но тем не менее сценарий PowerShell не работает. Что я делаю неправильно?

0
задан 22 February 2015 в 14:14
1 ответ

Ресурс Puppet типа exec не синхронизируется сам по себе. Он только «обновляется», что означает, что команда запускается только в том случае, если ресурс получает сигнал от другого ресурса, который успешно переходит из несинхронизированного состояния.

file { 'C:\not-yet-existent':
    ensure => 'file',
    notify => Exec['Run Script'],
}

Это не очень хороший режим работы, потому что если ваш сценарий не работает для по любой причине Марионетка, скорее всего, не узнает о создании нового события,потому что ресурс файл теперь синхронизирован.

Лучше не использовать refreshonly => true , а вместо этого дать Puppet подсказку, чтобы узнать, нужно ли выполнить команду или не. Тип exec может сделать это через свой onlyif и , если не параметры , и часто полезный (как в вашем случае) создает параметр.

exec { "Run Script":
    command   => 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Executionpolicy Unrestricted -File c:/test.ps1',
    logoutput => true,
    creates   => 'C:\z.txt',
}
1
ответ дан 4 December 2019 в 17:11

Теги

Похожие вопросы