如何检索在站点中进行了最后修改的用户

时间:2019-07-09 14:25:45

标签: sharepoint

我必须使用Power Shell脚本检索在给定Web中进行最后修改的用户的名称。

我知道检索上次修改日期很简单,但是如何检索进行过此类修改的用户呢?

检索网络中最后修改的项目也可以,因为然后我会选择“修改者”字段的值。

3 个答案:

答案 0 :(得分:2)

所以...只是为了确认...您想检查某个网络中所有列表和库中的所有项目,并从每个列表中获取最后修改的项目,并获得对其进行修改的用户,对吗? :)

如果是这种情况,这种PS脚本应该可以解决问题



    if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) 
    {
        Add-PSSnapin "Microsoft.SharePoint.PowerShell"
    }

    try
    {
        $siteUrl="[URL]";
        $web = Get-SPWeb $siteUrl;

        $spQuery = New-Object Microsoft.SharePoint.SPQuery;
        $spQuery.ViewAttributes = "Scope='Recursive'";
        $spQuery.Query = ""
        $spQuery.RowLimit = 1;

        $lastDate = $null;
        $lastUser = $null;

        foreach($list in $web.Lists)
        {
            Write-Host 'checking list -' $list.Title;
            $items = $list.GetItems($spQuery);
            if($items.Count -gt 0)
            {
               if($lastDate -eq $null)
               {
                    $lastDate = $items[0]['Modified'];
                    $lastUser = $items[0]['Editor'];
               }
               else
               {
                    if((get-date $items[0]['Modified']) -gt (get-date $lastDate))
                    {
                        $lastDate = $items[0]['Modified'];
                        $lastUser = $items[0]['Editor'];
                    }
               }
            }
        }

        Write-Host 'last user that modfied some item in this web was - '$lastUser ' - ' $lastDate;
    }
    catch
    {
        Write-Host $_.Exception.Message; 
    }

我希望它会有所帮助:)。

答案 1 :(得分:1)

您可以将Web对象的LastItemModifiedDate属性与站点上每个列表上具有相同名称的属性进行比较。只有一个列表具有相同的LastItemModifiedDate

$list = $web.lists | where-object {$_.LastItemModifiedDate -eq $web.LastItemModifiedDate }

然后您可以只查询列表中最近修改的项目,并查看谁对其进行了编辑。

$query = new-object Microsoft.SharePoint.SPQuery
$query.Query = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE' /></OrderBy>"
$query.RowLimit = 1
$items = $list.GetItems($query)
$item = $items[0]

完整的脚本可能看起来像这样(用所需的Web URL替换$webUrl):

$web = get-spweb $webUrl
$list = $web.lists | where-object {$_.LastItemModifiedDate -eq $web.LastItemModifiedDate }
$query = new-object Microsoft.SharePoint.SPQuery
$query.Query = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE' /></OrderBy>"
$query.RowLimit = 1
$items = $list.GetItems($query)
$item = $items[0]
write-host "$($web.AllUsers.GetById([int32]$item["Editor"].split(";#")[0]).DisplayName) modified item with ID $($item.ID) in $($list.Title) on $($item["Modified"])"
$web.dispose()

答案 2 :(得分:0)

以下是经过改进和测试的版本:

$web = Get-SPWeb $url
$webLastItemModifiedDate = $web.LastItemModifiedDate
$list = $web.lists | where-object {$_.LastItemModifiedDate -eq $webLastItemModifiedDate }    
$formattedLastItemModifiedDate = $webLastItemModifiedDate.toString("yyyy-MM-ddTHH:mm:ssZ")

$query = new-object Microsoft.SharePoint.SPQuery
$query.Query = "<Where><Eq><FieldRef Name='Modified' /><Value Type='DateTime'>" + $formattedLastItemModifiedDate + "</Value></Eq></Where>"
$query.RowLimit = 1
$items = $list.GetItems($query)
$item = $items[0]
$webLastModifier = $web.AllUsers.GetById([int32]$item["Editor"].split(";#")[0]).DisplayName