【发布时间】:2017-05-28 01:18:07
【问题描述】:
尝试推送 DSC 我遇到以下错误:
Failure to get a valid result from the execution of TestScript. The Test script should return True or False.
这是测试脚本:
return (Test-Path -Path "FullPath:\To\File")
我尝试过的几件事:
- 脚本资源具有在 Credential 参数中指定的(非托管)服务帐户的凭据。考虑到它可能没有对该目录的权限,导致 Test-Path 出错,我以目标计算机上的用户身份启动了 powershell 并运行了 cmdlet。它返回 False(如预期的那样)。从那以后,我确保配置无论如何都会授予帐户对该文件夹的权限。
- 认为返回 cmdlet 可能有点奇怪,我尝试将 cmdlet 分配给一个变量并返回它。没有骰子。
任何想法都将不胜感激。
编辑:这是完整的资源,对于那些好奇的人。基本上只需几行快速的代码就可以将脚本从源代码控制中拉出并将其放置在本地,这样我就可以创建一个计划任务来运行所述脚本。将结果转换为 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 = { }
}
【问题讨论】:
-
您在
return之前是否运行过任何 PowerShell?如果是这样,如果 PowerShell 有自己的输出,它可能会损坏您的输出。见How to return one and only one value from a PowerShell function?。 -
您的整个脚本资源可能有助于理解这个概念。
-
TestScript 就是单行代码,这也是为什么它如此令人困惑以至于它没有得到布尔结果的部分原因。在我测试将结果转换为布尔值时,我将用整个事情编辑问题。
-
credential未使用。您正在运行哪个版本的 PowerShell?您可以通过运行$PSVersionTable找到它 -
4.0.那么 Credential 作为参数存在,但没有为 Script 资源实现?
标签: powershell powershell-4.0 dsc