PowerShell如何处理具有自己属性的复杂类型(如SPListItem)的哈希表属性值?

时间:2014-11-14 11:46:10

标签: powershell sharepoint hashtable

请考虑以下代码,其中$p是哈希表(@{})。为什么$p.Item.ID$p["Item"].ID等于$null,而($p.Item | select ID).ID却没有?{/ p>

[DBG]: PS C:\Users\a> $p = @{}; $p.Item = $splist.GetItemById(308);
[DBG]: PS C:\Users\a> $p.Item

...
ID                                 : 308
...

[DBG]: PS C:\Users\a> $p.Item.ID -eq $null
True

[DBG]: PS C:\Users\a> ($p.Item|select ID).ID -eq $null
False
[DBG]: PS C:\Users\a> ($p.Item|select ID).ID
308

更新。 $p.Item是一个SharePoint列表项。对于其他更简单的(?)类型(例如Microsoft.ActiveDirectory.Management.ADGroup,其中$p.ADGroup.Name按预期工作的情况下不会发生此问题。

1 个答案:

答案 0 :(得分:0)

Good Powershell通常将该项目列为清单。您可以访问列表中的所有项目,如下所示:

Add-PSsnapin Microsoft.SharePoint.PowerShell
$SPAssignment = Start-SPAssignment

#Read List
$webS = Get-SPWeb "http://intranet.domain.com.br"
$listS = $webS.Lists["List"]

foreach($item in $listS.Items | Where { $_["ID"] -le 10})
{
    $item["Title"] = "Le id 10"
    $item.Update()

    $id = $item["ID"]
}
Stop-SPAssignment $SPAssignment

在我的代码中,我将标题更改为" Le id 10"并获得该项目的Id。请记住,您可以使用任何列。

另请注意,Sharepoint返回的对象的值附带默认SharePoint的名称,例如:

如果您有一个名为"爸爸妈妈"的列,则该对象或该项的值将返回" Dad_x0200_Mom"。 ($ item [' Dad_x0200_Mom"])

Powershell的优势在于返回列表中工作流的状态。但他回来了。为此,有一个工作流状态表,如下所示:

http://blog.metrostarsystems.com/2011/05/03/sharepoint-2007-workflow-status-codes/