Непредсказуемые импортированные модули 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