Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell如何处理具有自己属性的复杂类型(如SPListItem)的哈希表属性值?_Powershell_Sharepoint_Hashtable - Fatal编程技术网

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
——我承认并感谢您