1

このスクリプトは、各サイトの各ドキュメント ライブラリをループし、「CheckoutUser」という名前のフィールドを既定のビューに追加することになっています。問題は、スクリプトが各サイトの最初のライブラリにのみフィールドを追加し、他のすべてのライブラリをスキップして次のサイトに進むことです。

この問題を解決するには助けが必要です。ありがとう、アンナ

$site = Get-SPSite "http://sharepoint"

$site | Get-SPWeb -limit all | ForEach-Object {

    $_.Lists |  where  {$_.BaseType -eq "DocumentLibrary"} | ForEach-Object { 

        $view = $_.DefaultView

        $view.ViewFields.add("CheckoutUser")

        $view.Update()
    }
}

$site.Dispose()
4

1 に答える 1

1

これを試して:

$site = Get-SPSite "http://sharepoint"
$column = "CheckoutUser"

$site | Get-SPWeb -limit all | ForEach-Object {

    # Get all document libraries
    $lists = $_.Lists | where  {$_.BaseType -eq "DocumentLibrary"}

    # Loop libraries
    for ($i = 0; $i -lt $lists.Count; $i++)
    { 
        try
        {
            # Get current view
            $view = $lists[$i].DefaultView

            if($view) 
            {
                # Delete if already exist
                while($view.ViewFields.ToStringCollection().Contains($column))
                {
                    $view.ViewFields.delete($column)

                    $view.Update()
                }

                # Add column
                if(!$view.ViewFields.ToStringCollection().Contains($column))
                {     
                    $view.ViewFields.add($column)

                    $view.Update()
                }
            }
        }
        catch [Exception]
        {
            write-output ("  Error: " + $_.Exception.ToString())
        }
    }
}

$site.Dispose()
于 2012-08-26T20:01:44.413 に答える