当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件

作者:精品下载站 日期:2024-12-14 04:02:08 浏览:15 分类:玩电脑

如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件


最近,在进行一些内容搜索时,出现了一个问题,如何对搜索中找到的 OneDrive 文档执行选择性删除。虽然您可以使用内容搜索操作删除电子邮件,但 Office 365 不包含清理内容搜索找到的 OneDrive 文档的方法。

问题是如何删除内容搜索找到的部分但不是全部 OneDrive 文档。 本文演示如何使用 PowerShell 查看文件集,然后选择要删除的文件。

想知道如何使用 PowerShell 来管理条件访问 (CA) 策略? Damian 在本文中回顾了八个 cmdlet。

基础内容搜索

首先,我们需要运行内容搜索。 在 Microsoft 365 合规中心中,转到内容搜索部分并创建新搜索。输入“Exchange”作为搜索关键字,然后选择目标 OneDrive 搜索位置。搜索开始并创建一组预览结果。根据搜索位置的数量,这可能需要一些时间才能完成。

搜索完成后,我们可以检查预览结果。一旦您对搜索找到正确的项目感到满意,请通过选择“导出报告”生成结果报告:

[玩转系统] 如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件

报告导出后,我们可以下载生成的 CSV 文件:

[玩转系统] 如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件

下载报告需要密钥(图 3),可以从搜索详细信息中复制该密钥并将其粘贴到 Microsoft 导出实用程序中:

[玩转系统] 如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件

现在搜索已完成并已下载报告,我们可以利用该 CSV 文件来确定要删除哪些 OneDrive 文件。

查看调查结果并选择性删除 OneDrive

下一个任务是以可用的方式呈现 CSV 文件中的导出数据。 为此,我们使用 PowerShell 按用户 OneDrive 地址对文件进行分组,并允许审阅者选择一个、部分、全部或不删除任何文件。 我们使用 SharePoint Online 和 PNP PowerShell 模块中的 cmdlet 来执行 OneDrive 文件操作,并具有执行这些任务所需的权限。完整的脚本可以从 GitHub 下载。现在,我将强调一些重要的部分。

CSV 文件
我们下载的 CSV 文件格式如下所示:

[玩转系统] 如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件

总体脚本流程
导出文件未排序或采用我们可以使用的格式,因此首先需要处理数据以生成更可用的内容。在下面的代码中,我们询问 CSV 文件名,从输入文件中提取关键元素(用户和文件),并将这些数据存储在名为 $Table 的变量中。最后,按用户对 $Table 变量进行排序,并将结果存储在名为 $SortedResults 的变量中:

$CSVName = Read-Host "Please specify a CSV file to import [i.e. Results.csv]"
$CSV = Import-Csv $CSVName
$Table = Foreach ($Line in $CSV) {
    $User = $Line.Location
    $FullFilePath = $Line."Original Path"
    $Type = $Line.Type
    $File = $FullFilePath.Split('/')[-1]
    New-Object -TypeName PSCustomObject -Property @{
        User = $User
        File = $File
    }
}
$SortedResults = $Table | Sort-Object User,File

连接到 SharePoint Online
现在我们有了良好的数据,我们可以连接到 SharePoint Online。确保使用正确的租户名称连接到 SharePoint Online 管理端点(括号中 - 第一行代码):

$SharePointURL = 'https://<tenant domain>-admin.sharepoint.com'
$GAUPN = Read-Host "Please enter your Global Admin account UPN"
$Password = Read-Host -assecurestring "Please password for Global Admin account specified above"
$Credentials = New-Object -typeName System.Management.Automation.PSCredential -argumentlist $GAUPN, $Password
Connect-SPOService -Url $SharePointURL -Credential $Credentials

连接后,我们就可以开始处理 CSV 文件。 当我们循环遍历文件中的项目时,我们使用一些规则来处理数据。 首先,该循环是一个 foreach 循环,其中单独读取每一行,并在每个循环内执行操作。 总的来说,我们将操作的脚本中的步骤是:

  1. Foreach 循环将单个用户的每一行分组到一个变量中。
  2. 向脚本操作员(网站集管理员)授予脚本执行其任务的权限。
  3. 授予权限后,就会与用户的 OneDrive 帐户建立连接。
  4. 连接时,会查询并存储文件的 ID,因为需要识别要删除的文件。
  5. 当检测到用户更改时,当前文件列表将执行以下步骤。
    a。步骤 1 - 使用 Out-GridView 显示文件
    b。步骤 2 - 使用 Out-GridView 的输出开始删除文件。
    c.步骤 3 - 允许操作员不删除文件(您确定吗?选项)
  6. 处理完用户的文件后,Foreach 循环将移至下一个用户
  7. 继续执行步骤 1-6,直到检测到最后一个用户(CSV 文件的最后一行)
  8. 脚本退出。

访问用户的 OneDrive
要从用户的 OneDrive 帐户中删除文件,我们需要直接连接到他们的 OneDrive URL(在 CSV 文件中)。 连接后,我们会授予网站集管理员权限。 这两个任务可以通过以下脚本完成:

Connect-PnPOnline -Url $UserOneDrive -Credentials $Credentials
Set-SPOUser -Site $UserOneDrive -LoginName $GAUPN -IsSiteCollectionAdmin $True

Out-GridView 和 Remove-PnPItemListItem
对于上面列出的整个过程的第 5 步,我们需要向操作员显示文件,存储所选文件,然后允许用户决定文件移动。首先,使用 Out-GridView 显示文件:

$FilesToRemove = $RemovalList | Out-GridView -PassThru

• $FilesToRemove:(例程?)将存储操作员选择的任何文件。
• $RemovalList:CSV 中所有文件的原始列表
• -PassThru:此选项允许返回从 Out-GridView cmdlet 中选择的选项将存储在 $FilesToRemove 变量中。

选择文件后,将列出每个文件,操作员可以选择是否应删除该文件:

Write-Host "Removing $File from $User with ID of $SubID ..." -ForegroundColor Yellow
$ConfirmRemoval = Read-Host " Confirm file removal [y or n] "
If ($ConfirmRemoval -eq 'y') {
Remove-PnPListItem -List Documents -Identity $SubID
} Else {
Write-Host " *** FILE WAS NOT DELETED **" -ForegroundColor Yellow
}

操作员视图
现在我们已经检查了一些重要的代码部分,让我们回顾一下文件删除的整个过程。 下载 CSV 文件并处理其内容后,我们可以将其用作删除文件的基础。 当我们运行脚本时,第一件事是连接到目标租户。 我们还需要提供从搜索中下载的结果 CSV 文件。然后,该脚本使用 Out-GridView cmdlet 显示要查看和/或删除的文件:

[玩转系统] 如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件

选择一些文件后,我们可以决定删除或不删除这些文件,下面是一些示例:

[玩转系统] 如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件

先决条件
在运行脚本之前,您需要同意使用 PnP PowerShell 模块,因为它使用 OAuth 身份验证。如果我们不同意该应用程序,则会显示如下错误:

Connect-PnPOnline : AADSTS65001: The user or administrator has not consented to use the application with ID
'31359c7f-bd7e-475c-86db-fdb8c937548e' named 'PnP Management Shell'. Send an interactive authorization request for this user and resource.

要使用 PnP 模块,我们需要按照以下步骤操作:

$URL = 'https://<tenant>-my.sharepoint.com/personal/user_yourdomain_com'
Connect-PnPOnline -Url $Url -PnPManagementShell 

运行这些 cmdlet 将显示用于进入 https://microsoft.com/devicelogin 的一次性密码。然后我们可以输入并选择一个有权授予权限的帐户:

[玩转系统] 如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件

然后,我们需要批准 cmdlet 的同意:

[玩转系统] 如何使用 PowerShell 删除内容搜索找到的 OneDrive 文件

权限列表很大是因为 PNP 模块需要访问租户中的多个工作负载,从 Teams 到 SharePoint,还包括 Planner 和 Flow。 因此,该模块需要广泛的权限才能运行。 请记住,此同意仅允许在租户中使用该模块,并且可以限制其使用。

授予同意后,我们可以使用 PnP 模块连接到 OneDrive 并管理文件。

为什么选择 PNP 管理外壳?

PNP Management Shell 是一组功能强大的 500 多个 PowerShell cmdlet,允许访问 SharePoint Online 对象,包括操作存储在 OneDrive 帐户中的文件的能力。 我们还可以使用 Clear-PnPListItemAsRecord cmdlet 删除记录标签。 此操作是在 SharePoint 库中选择项目并选择 SharePoint Online 中提供的“取消声明记录”选项的 PowerShell 版本。

审计

从整体跟踪角度来看,SharePoint Online 会捕获 Office 365 审核日志中脚本删除的任何文件的详细信息。 搜索“已删除文件”,已删除文件的详细信息将显示在日志中。

结论

此处描述的脚本旨在处理获取报告数据进行内容搜索的繁琐过程,并使用它来驱动文档删除过程。 目前 Microsoft 365 合规中心中没有类似的功能。 要运行该脚本,您需要来自 Exchange Online(连接到合规性终结点)、SharePoint Online 和 PnP 模块的 cmdlet。最后,管理员必须授予在租户中使用 SharePoint PnP 模块 cmdlet 的许可。 在使用此脚本之前必须满足所有这些条件。

示例代码

为了帮助您为此解决方案构建自己的代码,该解决方案的操作示例代码已发布在 GitHub 中。

请谨慎使用此代码,因为它执行的多项任务只能由了解其含义的人员来完成:

  • 向您的租户授予对 PNP Management Shell 的访问权限
  • 使用Remove-PnPListItem,从用户的OneDrive中删除文件
  • 向用户的 OneDrive 授予 SiteCollectionAdmin 权限

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯