除非由NewGuid()创建,为什么不识别Guid?

时间:2017-01-26 00:32:12

标签: powershell-v3.0 dynamics-crm-2015

我有一些代码调用 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,名称是字符串。所以,似乎一切都是正确的。所以,有两个问题:

  1. 当我想到它时,是否会将某个投注包装到PSObject中或者没有被解析?
  2. 有没有办法找出导致问题的实际值?
  3. 更新

    如果我在调试会话期间暂停,我可以创建一个GUID和哈希表,并调用cmdlet并成功。

    更新2

    我已经确定问题出在-Id参数上。唯一可行的方法是使用[guid]::NewGuid()。如果我使用[guid]::new('...')[guid]::Parse('...'),则它不起作用并给我一个强制转换异常。转换也不适用于这些其他选项。即[guid]$id当使用其他两种类型之一创建id时不起作用。

    另请注意,传入哈希表的guid适用于所有情况。

    这些电话之间有什么区别?

1 个答案:

答案 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的文本表示。