Результатом выполнения Test-TargetResource должно быть логическое значение True или False. ДСК

я пытался создать пользовательский ресурс DSC, но это не удалось с ошибкой ниже.

введите здесь описание изображения

Возвращаемые результаты имеют недопустимый формат. Результатом выполнения Test-TargetResource должно быть логическое значение True или False.

Когда я запускаю функцию вручную в командной строке powershell, она завершается успешно и возвращает мне логическое значение.

введите здесь описание изображения

Вот код, который я использовал для Test-TargetResource

function Test-TargetResource
{

[OutputType([boolean])]
param (
[parameter(Mandatory)]
[string]
$vcentername,
[parameter(Mandatory)]
[string]
$credentialfile,
[parameter(Mandatory)]
[string]
$resourcepoolname,
[ValidateSet('Present','Absent')]
[string]
$Ensure = 'Present'
)

try 

{

#Addpssnapin VMware.VimAutomation.Core

$snap = Add-PSSnapin VMware.VimAutomation.Core

$MyCredentials= Import-Clixml $credentialfile

Write-Verbose "Connecting to vCenter $vcentername"

$connect = Connect-VIServer $vcentername -Credential $MyCredentials

Write-Verbose "Checking if the snapshots exist or doesnot exist"
$snapshotExist = (Get-ResourcePool $resourcepoolname | Get-VM | Get-Snapshot)


if ($Ensure -eq "Present") {

if ($snapshotExist) {

Write-Verbose "Snapshots Exists for these set of VM's. No need of taking further action"
return $true

} 
else {
Write-Verbose "Snapshots don't exists for these set of VM's in $resourcepoolname"
return $false
}
} 


else {

if ($snapshotExist) {
Write-Verbose "Snapshots exist on these VM's; snapshots must be removed."
return $false
} 

else {
Write-Verbose "Snapshots does not exist; nothing to remove."
return $true
}

}


}
    catch {
    $exception = $_
    Write-Verbose "Error occurred while executing Test-TargetResource function"
    while ($exception.InnerException -ne $null)
    {
    $exception = $exception.InnerException
    Write-Verbose $exception.message
    }
    }


    }

Кто-нибудь может мне помочь.


person PowerShell    schedule 07.01.2016    source источник


Ответы (1)


Ваш блок catch не возвращает [bool]. Вы можете видеть в подробном выводе на скриншоте, что происходит попадание в блок catch. Вы должны return $false в конце catch.

catch {
    $exception = $_
    Write-Verbose "Error occurred while executing Test-TargetResource function"
    if ($exception.InnerException -ne $null)
    {
        $exception = $exception.InnerException
        Write-Verbose $exception.message
    }
    return $false
}
person briantist    schedule 07.01.2016
comment
привет @briantist не могли бы вы сказать мне, где именно это разместить - person PowerShell; 07.01.2016
comment
@PowerShell в конце блока catch, сразу после записи $exception.message (ну, после блока while, который на самом деле должен быть if). Итак, прямо перед закрытием } блока catch. - person briantist; 07.01.2016
comment
спасибо, есть ли способ передать учетные данные этому ресурсу, а не использовать import-clixml ?? - person PowerShell; 07.01.2016
comment
@PowerShell вам нужно только принять параметр [PSCredential] для вашего ресурса; это так просто на стороне создания ресурсов. Чтобы узнать об использовании способности DSC шифровать учетные данные, см. мой связанный ответ. - person briantist; 07.01.2016