Как получить пользователя, который сделал последние изменения на сайте - PullRequest
1 голос
/ 09 июля 2019

Я должен получить имя пользователя, который выполнил последнюю модификацию в данном Интернете, используя сценарий Power Shell.

Я знаю, что получить дату последней модификации элемента довольно просто, но как получитьпользователь, который сделал такую ​​модификацию?

Извлечение последнего измененного элемента в Интернете тоже подойдет, так как тогда я выберу значение в поле "Modified By".

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Итак ... просто чтобы подтвердить ... Вы хотите проверить все элементы во всех списках и библиотеках в некоторой сети, получить последний измененный элемент из каждого списка и получить пользователя, который его изменил, верно?:)

если это так, то скрипт такого рода 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 голос
/ 11 июля 2019

Вы можете сравнить свойство 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]

Полный сценарий может выглядеть примерно так (заменив $webUrl с нужным веб-URL):

$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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...