我有一些代码调用 Microsoft.Xrm.Data.PowerShell 的Set-CrmRecord
cmdlet。它返回InvalidCastException
。麻烦的是我找不到任何不正确的类型。这是代码:
Set-CrmRecord -conn $conn -EntityLogicalName $entityName -Id $id -Fields $entity -Upsert
id必须是guid。当我暂停脚本并输入$id.GetType()
时,它返回它是一个guid。字段必须是哈希表,GetType()
确认它是哈希表。与连接和实体名称相同。我还检查了哈希表,如下所示:
$id = [guid]::Parse($_.Queue)
$entity = @{
"queueid" = $id;
"name" = $_.Name
}
queueid是Guid,名称是字符串。所以,似乎一切都是正确的。所以,有两个问题:
如果我在调试会话期间暂停,我可以创建一个GUID和哈希表,并调用cmdlet并成功。
我已经确定问题出在-Id参数上。唯一可行的方法是使用[guid]::NewGuid()
。如果我使用[guid]::new('...')
或[guid]::Parse('...')
,则它不起作用并给我一个强制转换异常。转换也不适用于这些其他选项。即[guid]$id
当使用其他两种类型之一创建id时不起作用。
另请注意,传入哈希表的guid适用于所有情况。
这些电话之间有什么区别?
答案 0 :(得分:1)
Set-CrmRecord
希望您在-Fields哈希表中指定记录的ID。
示例:
使用upsert创建一个新帐户
$id = [Guid]::NewGuid()
$entity = @{"name"="Foo Bar"}
$newid = Set-CrmRecord -conn $con -EntityLogicalName account -id $id -Fields $entity -Upsert
现在用upsert
更新它$entity = @{"name"="Foo Bar Baz"}
Set-CrmRecord -conn $con -EntityLogicalName account -id $newid -Fields $entity -Upsert
您可以将-id参数指定为Guid对象或guid的文本表示。