如何用PowerShell脚本获取网站最后修改操作的用户名称
嘿,我来帮你搞定这个需求!要获取指定网站里最后修改项的修改用户,其实可以通过PowerShell结合SharePoint的管理工具来实现——毕竟你提到的Modified By字段是SharePoint里的标准字段嘛。下面给你两种常用的方案,按需选择:
方案1:用PnP PowerShell(推荐,灵活又省心)
PnP PowerShell是专门针对SharePoint的工具,操作起来比原生模块更顺手,先给你走一遍流程:
- 先安装PnP模块(如果还没装的话):
Install-Module -Name PnP.PowerShell -Force -AllowClobber
- 连接到你的目标网站:
Connect-PnPOnline -Url "https://yourtenant.sharepoint.com/sites/yourtargetsite" -Interactive
- 编写脚本遍历列表,找到全站最新修改的项并提取修改用户:
# 先获取网站里所有非隐藏、非系统的列表(避免拿到系统自动生成的项) $lists = Get-PnPList | Where-Object { !$_.Hidden -and !$_.SystemList } # 初始化变量存最新修改的项 $latestModifiedItem = $null # 逐个列表找最新项,再对比出全站最久的那个 foreach ($list in $lists) { $currentLatestItem = Get-PnPListItem -List $list -Fields "Modified", "Editor" -OrderBy Modified -Top 1 if ($currentLatestItem -and (!$latestModifiedItem -or $currentLatestItem.Modified -gt $latestModifiedItem.Modified)) { $latestModifiedItem = $currentLatestItem } } # 输出结果 if ($latestModifiedItem) { Write-Host "✅ 最后修改项的用户:" $latestModifiedItem.Editor.LookupValue Write-Host "⏰ 修改时间:" $latestModifiedItem.Modified Write-Host "📂 所属列表:" $latestModifiedItem.ParentList.Title } else { Write-Host "❌ 网站里没找到任何修改过的项" }
这里的Editor字段就是对应SharePoint里的Modified By,通过.LookupValue就能直接拿到用户名称啦。
如果你习惯用微软原生的SPO管理模块,也可以这么做:
- 先连接到SPO管理员中心:
Connect-SPOService -Url "https://yourtenant-admin.sharepoint.com"
- 然后获取目标网站和列表,查找最新项:
# 指定目标网站URL $siteUrl = "https://yourtenant.sharepoint.com/sites/yourtargetsite" $site = Get-SPOSite -Identity $siteUrl # 获取网站下的有效列表 $lists = Get-SPOList -Web $siteUrl | Where-Object { !$_.Hidden -and !$_.SystemList } $latestModifiedItem = $null foreach ($list in $lists) { $currentLatestItem = Get-SPOListItem -List $list.Id -Web $siteUrl -Fields "Modified", "Editor" -OrderBy Modified -Top 1 if ($currentLatestItem -and (!$latestModifiedItem -or $currentLatestItem.FieldValues["Modified"] -gt $latestModifiedItem.FieldValues["Modified"])) { $latestModifiedItem = $currentLatestItem } } # 输出结果 if ($latestModifiedItem) { $editorName = $latestModifiedItem.FieldValues["Editor"].LookupValue Write-Host "✅ 最后修改项的用户:" $editorName Write-Host "⏰ 修改时间:" $latestModifiedItem.FieldValues["Modified"] Write-Host "📂 所属列表:" $list.Title } else { Write-Host "❌ 网站里没找到任何修改过的项" }
一些小提示
- 确保你有目标网站的读取权限,不然脚本会报错哦
- 如果只需要某个特定列表的最新项,直接去掉遍历列表的部分,指定列表名称就行,比如:
Get-PnPListItem -List "Documents" -Fields "Modified", "Editor" -OrderBy Modified -Top 1 - 要是你用的是本地SharePoint Server,记得加载原生的SharePoint PowerShell snapin:
Add-PSSnapin Microsoft.SharePoint.PowerShell,连接方式改成Get-SPWeb "http://yoursiteurl"就行
内容的提问来源于stack exchange,提问作者Ciro di Marzo
相关产品推荐
相关产品推荐

