PowerShell如何处理具有自己属性的复杂类型(如SPListItem)的哈希表属性值?
考虑下面的代码,其中PowerShell如何处理具有自己属性的复杂类型(如SPListItem)的哈希表属性值?,powershell,sharepoint,hashtable,Powershell,Sharepoint,Hashtable,考虑下面的代码,其中$p是一个哈希表(@{})。为什么$p.Item.ID和$p[“Item”].ID等于$null,而($p.Item |选择ID).ID不等于 [DBG]: PS C:\Users\a> $p = @{}; $p.Item = $splist.GetItemById(308); [DBG]: PS C:\Users\a> $p.Item ... ID : 308 ... [DBG]: PS C:\
$p
是一个哈希表(@{}
)。为什么$p.Item.ID
和$p[“Item”].ID
等于$null
,而($p.Item |选择ID).ID
不等于
[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
按预期工作,则不会出现此问题。良好的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
在我的代码中,我将标题更改为“leID10”,并获取项目的id。请记住,您可以处理任何列
还请记住,Sharepoint返回的对象值与默认Sharepoint的名称一起提供,例如:
如果有一个名为“Dad Mom”的列,则对象或项的值将返回“Dad_x0200_Mom”。($item['Dad_x0200_Mom]”)
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
您如何初始化
$p
?是否初始化$($p.Item).ID
有效?基本上答案是您没有正确访问属性…是的,它有效。我想得到一个更详细的解释作为答案接受。提前感谢。我不明白的是PowerShell是如何专门处理哈希表属性中的SPListItems的。这可能对某些人来说很有趣,但对我和其他人来说没有消息抱歉,这对初始问题没有帮助。PowerShell的优点是它返回对象而不是字符串,并支持管道等。顺便说一句,您使用Where Object
枚举和过滤$list.Items
,而不是使用SPQuery
预过滤返回值,这是一种不好的做法d数据库级别的项目。我记得我没有在桌面上使用。我只是为了向您展示一个示例。我通过了Sharepoint、Powershell、Office 365的Microsoft认证(MCSD和其他).在他的断言拒绝帮助你并祝你好运之后。谢谢你的努力,我不想粗鲁,但你的回答并不能回答我的问题,无论如何,请展示好的做法,而不是坏的做法,无论你的意图多么好,尤其是如果你被认证——不要玷污你自己的声誉。或者,如果时间紧迫,请展示战争n关于收件人应该避免的捷径。顺便说一句,为了公平起见,您展示了一个良好的做法—*-spassign
——我承认并感谢您