考虑以下代码,其中$p
是一个哈希表(@{}
)。为什么$p.Item.ID
和$p["Item"].ID
等于$null
,而($p.Item | select ID).ID
则不等于?
[DBG]: PS C:Usersa> $p = @{}; $p.Item = $splist.GetItemById(308);
[DBG]: PS C:Usersa> $p.Item
...
ID : 308
...
[DBG]: PS C:Usersa> $p.Item.ID -eq $null
True
[DBG]: PS C:Usersa> ($p.Item|select ID).ID -eq $null
False
[DBG]: PS C:Usersa> ($p.Item|select ID).ID
308
更新。 $p.Item
是一个 SharePoint 列表项。对于其他更简单 (?) 类型(如 Microsoft.ActiveDirectory.Management.ADGroup
),$p.ADGroup.Name
按预期工作,则不会出现此问题。
好 Powershell le 通常将项目作为列表。您可以访问列表中的所有项目,如下所示:
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"。($ 项目 ['Dad_x0200_Mom "])
Powershell 的优点是返回列表中工作流的状态。但他以数字返回。为此,有一个工作流状态表,如下所示:
http://blog.metrostarsystems.com/2011/05/03/sharepoint-2007-workflow-status-codes/