Непредсказуемые импортированные модули DSC

Кажется, что-то глючит с модулями DSC и PowerShell.

Ресурсы, использующие модуль RemoteDesktop, случайным образом завершают работу со следующей ошибкой, зарегистрированной в журнале событий DSC.

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

The term 'Get-RDRemoteApp' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Иногда вместо Get-RDRemoteApp, это логи Get-RDServer... хотя я не звоню Get-RDServer где-нибудь в моем сценарии. Кажется, что-то не так с тем, как DSC использует сессии PowerShell для вызова ресурсов. Если я изменю приведенный ниже класс, чтобы фактически запустить необходимые команды, запустив новый процесс powershell.exe, он всегда будет работать...

[DSCResource()]
class zRemoteApp {
    $ErrorActionPreference = "Stop"

    [DscProperty(Key)]
    [string]$Name = "MyApp"

    [DscProperty()]
    [string]$Path

    [bool]$RemoteAppExists

    [zRemoteApp]Get() {
        Import-Module RemoteDesktop

        $this.RemoteAppExists = [boolean](Get-RDRemoteApp -Alias $this.Name)

        Return $this
    }

    [void]Set() {
        Import-Module RemoteDesktop
        $this.Get()

        Get-RDSessionCollection |% {
            New-RDRemoteApp -CollectionName $_.CollectionName -Alias $this.Name -DisplayName $this.Name -FilePath $Path
        }
    }

    [bool]Test() {    
        $this.Get()
        Return $this.RemoteAppExists
    }
}

Редактировать - если я использую ScriptBlock, он последовательно работает:

    $job = Start-Job -ScriptBlock {
        param($Name)
        Import-Module RemoteDesktop
        [boolean](Get-RDRemoteApp -Alias $Name)
    } -ArgumentList $this.Name

    $this.RemoteAppExists = $job | Wait-Job | Receive-Job

    Remove-Job $job

    Return $this

0 ответов

Другие вопросы по тегам