DSC Script Resource的TestScript无法返回布尔值

时间:2017-01-12 19:37:48

标签: powershell powershell-v4.0 dsc

尝试推动DSC我遇到以下错误:

Failure to get a valid result from the execution of TestScript. The Test script should return True or False.

这是TestScript:

return (Test-Path -Path "FullPath:\To\File")

我尝试了几件事:

  1. 脚本资源具有Credential参数中指定的(非托管)服务帐户凭据。认为它可能没有该目录的权限,导致Test-Path出错,我在目标机器上启动了powershell作为用户并运行了cmdlet。它返回False(如预期的那样)。我已经确定配置为帐户提供了对该文件夹的权限。
  2. 认为返回cmdlet可能是一些奇怪的特性,我尝试将cmdlet分配给变量并返回该变量。没有骰子。
  3. 任何想法都会受到赞赏。

    编辑:对于那些好奇的人来说,这里是完整的资源。它基本上只是几行快速将脚本从源代码控制中拉出来并将其置于本地,这样我就可以创建一个计划任务来运行所述脚本。将结果转换为bool不起作用(相同的错误)。我想知道它是否甚至在此时进入了TestScript ...检查get-executionpolicy将其显示为未定义的帐户但是在userpolicy,machinepolicy和localmachine级别它们都是绕过

    Script NameOfScript {
        DependsOn = "[cNtfsPermissionEntry]DirectoryPermissions"
        Credential = $serviceAccountPSCredentialObject
        SetScript = {
            Import-Module -Name Subversion
            New-SvnWorkingCopy -Url "https://svnrepourl/script.ps1" -Path "E:\Scripts\"
        }
        TestScript = {
            [bool]$result
            $result = Test-Path -Path "E:\Scripts\script.ps1" -ErrorAction Stop
            return $result
        }
        GetScript = { }
    }
    

2 个答案:

答案 0 :(得分:0)

试试这个

return ([bool]$testPath = Test-Path -Path "FullPath:\To\File")

答案 1 :(得分:-1)

this forum post的帮助下计算出来。最初我没有想到它会有很大的帮助,因为我不应该遇到双跳问题,但我会解释为什么它与下面有密切关系。 @ TravisEz13发表评论称Credential参数未被使用,但这是不正确的。

如果查看脚本资源,当您指定凭据时,这就是它运行脚本块的方式:

$scriptExecutionResult = Invoke-Command -ScriptBlock $ScriptBlock -ComputerName . -Credential $Credential

相关服务帐户无法远程访问本机。因此,当我作为该用户在本地启动PowerShell并运行Test-Path cmdlet时,它可以正常工作,但当我尝试使用该帐户的信誉运行上述Invoke-Command时,它会返回拒绝访问错误

我的解决方案是为subversion checkout编写一个模块/资源。不仅仅是为了解决这个问题,还因为我上面使用的subversion powershell模块并没有提供将证书传递给svn二进制文件的方法。