PowerShell-すべてのwebを反復処理し、すべてのリストを反復処理してから、リストが特定の名前である列を追加します

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

  •  10-12-2019
  •  | 
  •  

質問

サイトコレクション内のすべてのwebを反復処理し、それらのweb内のすべてのリストを反復処理してから、リストに特定の名前がある列を追加す

これは私がこれまでに持っているものです:

[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()

これは私が得るエラーです:

Null値の式でメソッドを呼び出すことはできません。で C:\scripts\addcalc.ps1:24 チャー:22 +++++++++++フィールド。追加 <<<< ("Calc"、"計算された"、0) +カテゴリ情報 :InvalidOperation:(追加:文字列)[]、RuntimeException +完全修飾エラー :InvokeMethodOnNull

私はそれがウェブを反復してから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()

SPSiteオブジェクトの場合と同じように、SPWebオブジェクトを使用した後に破棄します。

他のヒント

ありがとうAndrey。あなたの提案は私を正しい道に導きました。元の質問を解決するスクリプトの最終的な作業版です。

[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帰属
所属していません sharepoint.stackexchange
scroll top