我写了两个自己的DSC资源。当我在运行PowerShell 4且使用其中一种资源的计算机上调用Get-DscConfiguration
时(PowerShell 5不受影响,我会收到以下错误:
Get-DscConfiguration:无法将“System.Management.Automation.SwitchParameter”类型的对象强制转换为类型 'System.IConvertible'
和
Get-DscConfiguration:无法将类型为“System.String”的对象强制转换为类型 'Microsoft.Management.Infrastructure.Native.InstanceHandle'。
发生了什么事?什么是DSC试图转换以及如何让这个错误消失?
答案 0 :(得分:0)
当资源的Get-TargetResource
函数返回的哈希表中的值类型不匹配或无法隐式转换为资源的MOF中定义的类型时,会发生这种情况。
我的第一个DSC资源的MOF声明了这个属性:
[Write]
boolean CaseSensitive;
我的Get-TargetResource
函数声明了Switch
参数:
[Switch]
# The INI file being modified is case-sensitive.
$CaseSensitive,
这样就回来了:
return @{
# snip
CaseSensitive = $CaseSensitive;
}
解决方案是自己投射开关:
return @{
# snip
CaseSensitive = [bool]$CaseSensitive;
}
我的第二个资源的MOF声明了PSCredential
属性:
[Write,
EmbeddedInstance("MSFT_Credential")]
string TaskCredential;
我的Get-TargetResource
函数声明这是一个PsCredential
对象:
[Management.Automation.PSCredential]
# The principal the task should run as. Use `Principal` parameter to run as a built-in security principal. Required if `Interactive` or `NoPassword` switches are used.
$TaskCredential,
默认情况下,此属性作为空字符串返回:
$resource = @{
TaskCredential = '';
}
解决方案是将TaskCredential
的默认值设置为$null
:
$resource = @{
TaskCredential = $null;
}