如何使用PowerShell批量删除文件夹

发布于 2025-01-09 06:54:37 字数 2788 浏览 4 评论 0原文

我正在尝试删除我的 OneDrive 文件夹,该文件夹非常大,并且有许多包含许多项目的嵌套文件夹。我有这个脚本,但它无法处理非常大的文件夹,所以只是想知道如何修改它,以便它会批量删除它

我正在其他地方寻找示例,但尚未找到它,所以我会如果有人可以帮助我修改或给我建议,我真的很感激。

#Variables
$SiteURL = "OneDrive URL"
$ServerRelativeUrl= "/Zipped_Documents"


 
Try {
    #Get Credentials to connect
    $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Global:adminUPN, $Global:adminPwd)
    $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $ctx.Credentials = $Credentials
   
    #Get the web from URL
    $Web = $Ctx.web
    $Ctx.Load($Web)
    $Ctx.executeQuery()
 
    #Get the Folder object by Server Relative URL
    $Folder = $Web.GetFolderByServerRelativeUrl($ServerRelativeUrl)
    $Ctx.Load($Folder)
    $Ctx.ExecuteQuery()
 
    #Call the function to empty Folder
    Empty-SPOFolder $Folder
 
    #Delete the given Folder itself
    Write-host  -f Green "Deleting Folder:"$Folder.ServerRelativeUrl
    $Folder.Recycle() | Out-Null
    $Ctx.ExecuteQuery()
}
Catch {
    write-host -f Red "Error:" $_.Exception.Message
}


 
#Function to Delete all files and Sub-folders of a given Folder
Function Empty-SPOFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
    Try {
        #Get All Files from the Folder
        $Ctx = $Folder.Context
        $Files = $Folder.Files
        $Ctx.Load($Files)
        $Ctx.ExecuteQuery()
 
        #Iterate through each File in the Root folder
        Foreach($File in $Files)
        {
            #Delete the file
            Write-Host -f Green "$File.Name"
            $Folder.Files.GetByUrl($File.ServerRelativeUrl).Recycle() | Out-Null
            $Folder.Files.GetByUrl($File.ServerRelativeUrl).DeleteObject() | Out-Null
            Write-host -f Green "Deleted File '$($File.Name)' from '$($File.ServerRelativeURL)'"
        }
        $Ctx.ExecuteQuery()
 
        #Process all Sub Folders of the given folder
        $SubFolders = $Folder.Folders
        $Ctx.Load($SubFolders)
        $Ctx.ExecuteQuery()
         
        #delete all subfolders
        Foreach($Folder in $SubFolders)
        {
            #Exclude "Forms" and Hidden folders
           
                #Call the function recursively to empty the folder
                Empty-SPOFolder -Folder $Folder
 
                #Delete the folder
                Write-Host -f Green "$Folder.UniqueId"
                #$Ctx.Web.GetFolderById($Folder.UniqueId).Recycle() | Out-Null
                $Ctx.Web.GetFolderById($Folder.UniqueId).DeleteObject() | Out-Null
                $Ctx.ExecuteQuery()
                Write-host  -f Green "Deleted Folder:"$Folder.ServerRelativeUrl
           
        }
    }
    Catch {
    write-host -f Red "Error: $Folder.UniqueId - $File.Name " $_.Exception.Message
    }
}

I'm trying to delete my OneDrive folder that is really large and has many nested folder with many items. I have this script but it's not able to handle a very large folder so just wondering how can I modify it so that It'll delete it by batch

I'm looking for an example elsewhere but couldn't find it yet so I would be really appreciated if anybody can help me modify or give me suggestion.

#Variables
$SiteURL = "OneDrive URL"
$ServerRelativeUrl= "/Zipped_Documents"


 
Try {
    #Get Credentials to connect
    $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Global:adminUPN, $Global:adminPwd)
    $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $ctx.Credentials = $Credentials
   
    #Get the web from URL
    $Web = $Ctx.web
    $Ctx.Load($Web)
    $Ctx.executeQuery()
 
    #Get the Folder object by Server Relative URL
    $Folder = $Web.GetFolderByServerRelativeUrl($ServerRelativeUrl)
    $Ctx.Load($Folder)
    $Ctx.ExecuteQuery()
 
    #Call the function to empty Folder
    Empty-SPOFolder $Folder
 
    #Delete the given Folder itself
    Write-host  -f Green "Deleting Folder:"$Folder.ServerRelativeUrl
    $Folder.Recycle() | Out-Null
    $Ctx.ExecuteQuery()
}
Catch {
    write-host -f Red "Error:" $_.Exception.Message
}


 
#Function to Delete all files and Sub-folders of a given Folder
Function Empty-SPOFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
    Try {
        #Get All Files from the Folder
        $Ctx = $Folder.Context
        $Files = $Folder.Files
        $Ctx.Load($Files)
        $Ctx.ExecuteQuery()
 
        #Iterate through each File in the Root folder
        Foreach($File in $Files)
        {
            #Delete the file
            Write-Host -f Green "$File.Name"
            $Folder.Files.GetByUrl($File.ServerRelativeUrl).Recycle() | Out-Null
            $Folder.Files.GetByUrl($File.ServerRelativeUrl).DeleteObject() | Out-Null
            Write-host -f Green "Deleted File '$($File.Name)' from '$($File.ServerRelativeURL)'"
        }
        $Ctx.ExecuteQuery()
 
        #Process all Sub Folders of the given folder
        $SubFolders = $Folder.Folders
        $Ctx.Load($SubFolders)
        $Ctx.ExecuteQuery()
         
        #delete all subfolders
        Foreach($Folder in $SubFolders)
        {
            #Exclude "Forms" and Hidden folders
           
                #Call the function recursively to empty the folder
                Empty-SPOFolder -Folder $Folder
 
                #Delete the folder
                Write-Host -f Green "$Folder.UniqueId"
                #$Ctx.Web.GetFolderById($Folder.UniqueId).Recycle() | Out-Null
                $Ctx.Web.GetFolderById($Folder.UniqueId).DeleteObject() | Out-Null
                $Ctx.ExecuteQuery()
                Write-host  -f Green "Deleted Folder:"$Folder.ServerRelativeUrl
           
        }
    }
    Catch {
    write-host -f Red "Error: $Folder.UniqueId - $File.Name " $_.Exception.Message
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

捎一片雪花 2025-01-16 06:54:37

在 cmd 提示符下尝试创建一个空文件夹,然后使用 robocopy:

robocopy 空文件夹 \UNC\path\to\SiteFolder /MIR

In cmd prompt try creating an empty folder and then use robocopy:

robocopy emptyFolder \UNC\path\to\SiteFolder /MIR

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文