powershell - 迭代所有网站,然后迭代所有列表,然后添加列列表是某个名称的列

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/96719

  •  10-12-2019
  •  | 
  •  

我正在尝试将一个脚本放在网站集中的所有网站中的脚本,然后迭代这些网中的所有列表,然后添加列表具有某个名称的列。

这就是我到目前为止的内容:

[CmdletBinding()]
Param
(
[Parameter(Mandatory=$True,Position=1)]
[string]$sc
)

$spsite = Get-SPsite $sc 

foreach ($web in $spsite.AllWebs)
{   
        foreach ($list in $spsite.AllWebs)
        {
            $splist = $list.Lists["PSList"]
            $splist.Fields.Add("Calc", "Calculated", 0)
            $spfield = $splist.Fields.Getfield("Calc")
            $spfield.formula = "=TEXT([Start Date],`"mm/dd/yyyy`")`&`" - `"`&TEXT([End Date],`"mm/dd/yyyy`")"
            $spfield.outputtype = "Text"
            $spfield.update()
        }
}
$spsite.dispose()
.

这是我得到的错误:

您无法在空值表达式上调用方法。在 C:\ scripts \ addcalc.ps1:24 char:22 + $ splist.fields.add <<<<(“calc”,“计算”,0) + categoryInfo:InvalidOperation :(添加:字符串)[],RuntimeException +全新ridiaErrorID:Invokemethodonnull

我确定它是因为我没有通过Web迭代,然后通过Lists属性迭代。实现我想要做什么的正确方法是什么?

有帮助吗?

解决方案

首先 - 您必须使用删除foreach ($list in $spsite.AllWebs)然后查找列表

$list = $web.Lists["InternalNameOfTheList"]

$list = $web.GetList($web.Url + "/Lists/" + $ListName) 之后使用添加列

$spFieldType = [Microsoft.SharePoint.SPFieldType]::Text //change to your field type

$list.Fields.Add("YourColumn",$spFieldType,$false)
$list.Update()
.

并在使用它后处理spweb对象,就像您为spsite对象一样。

其他提示

谢谢安德烈。你的建议让我沿着正确的道路。以下是解决原始问题的脚本的最终工作版本。

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True,Position=1)]
   [string]$sc
)
$site = Get-SPSite $sc
$webs = Get-SPWeb $sc
$count = 0
foreach ($web in $site.AllWebs)
{   
            if (($webs.Count -le $Count) -and ($list = $web.Lists["PSList"]))
            {   

                $list.Fields.Add("Calc", "Calculated", 0)
                $field = $list.Fields.Getfield("Calc")
                $field.formula = "=TEXT([Start Date],`"mm/dd/yyyy`")`&`" - `"`&TEXT([End Date],`"mm/dd/yyyy`")"
                $field.outputtype = "Text"
                $field.update()
            }           
$count ++       
}
$site.dispose()
$webs.dispose()
.

许可以下: CC-BY-SA归因
scroll top