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

이 오류가 발생합니다 :

null 값 표현식에서 메소드를 호출 할 수 없습니다.에서 C : \ Scripts \ AddCalc.ps1 : 24 char : 22 + $ splist.fields.add <<<< ( "calc", "계산", 0) + CategoryInfo : InvalidOperation : (추가 : 문자열) [], RuntimeException + FlyQualifiedErrorID : InvoKemethodonnull

웹을 통해 반복하지 않고 목록 속성을 통해 반복하지 않기 때문입니다.내가 무엇을하려고하는 것을 얻는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

먼저 - 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