Powershell通过映射的网络驱动器删除sharepoint online library中的所有文件扩展名

Powershell通过映射的网络驱动器删除sharepoint online library中的所有文件扩展名,powershell,sharepoint,sharepoint-online,network-drive,Powershell,Sharepoint,Sharepoint Online,Network Drive,您好,提前谢谢您的帮助。我正试图删除由于安全漏洞而添加到库中文档的额外扩展。当我手动删除扩展名“.easy2lock”时,文件变为可用。但是,当我尝试通过powershell以编程方式执行此操作时,它可以工作,但不适用于具有长路径的文件夹。有人知道如何在powershell中解决这个问题吗 我已经尝试更新我的注册表以允许长路径,但是,我不认为这对 以下是我收到的脚本和错误: 我不得不相信你的话,更改名称后这些文件是可用的,这不是我的经验。要能够访问powershell中的长路径,您需要使用-

您好,提前谢谢您的帮助。我正试图删除由于安全漏洞而添加到库中文档的额外扩展。当我手动删除扩展名“.easy2lock”时,文件变为可用。但是,当我尝试通过powershell以编程方式执行此操作时,它可以工作,但不适用于具有长路径的文件夹。有人知道如何在powershell中解决这个问题吗

我已经尝试更新我的注册表以允许长路径,但是,我不认为这对 以下是我收到的脚本和错误:


我不得不相信你的话,更改名称后这些文件是可用的,这不是我的经验。要能够访问powershell中的长路径,您需要使用
-LiteralPath
参数。不幸的是,
-Path
参数将是管道安装时使用的默认参数
-LiteralPath
通过propertyname接受管道输入,因此您可以像这样操作对象删除路径和添加文本路径

Get-ChildItem -Filter "*$BadExtension" -Recurse |
    Select-Object Name,Basename,Extension,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
        Rename-Item -NewName {$_.Name -replace $BadExtension}
或者您可以使用
Foreach对象
或Foreach循环,并对路径使用所需的语法
\\?\

Get-ChildItem -Filter "*$BadExtension" -Recurse | Foreach-Object {
    Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName ($_.Name -replace ‘$BadExtension’)
}
编辑

由于basename是所需的文件名(只是没有不需要的扩展名),因此可以使用basename作为新名称。所有四个示例都经过了测试并确认有效。如果它对你不起作用,那么还有别的事情在发生

Get-ChildItem -Filter *$BadExtension -Recurse | ForEach-Object {
    Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName ($_.name -replace $BadExtension)
}

Get-ChildItem -Filter *$BadExtension -Recurse | ForEach-Object {
    Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName $_.basename
}

Get-ChildItem -Filter "*$BadExtension" -Recurse |
    Select-Object Name,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
        Rename-Item -NewName {$_.Name -replace $BadExtension}

Get-ChildItem -Filter "*$BadExtension" -Recurse |
    Select-Object Basename,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
        Rename-Item -NewName {$_.baseName}

谢谢你的快速回复。您提供的脚本出现了以下错误:“无法计算参数‘newname’,因为它的参数被指定为脚本块,并且没有输入”。我注意到的另一件有趣的事情是,在我的原始脚本中,删除项路径工作得很好,但没有重新命名。这一个有效:[string]$DeleteBadExtension=“.easy2lock_read_me”Get ChildItem*$DeleteBadExtension-Recurse | foreach{Remove Item-Path$\.FullName}我编辑了我的答案,我现在无法测试,所以如果不成功,请告诉我,这是我得到的错误:“文件名、目录名或卷标签语法不正确”。根据我的研究,第二阶段可能会失败。例如,我的文档如下所示:MyDocument.xlsx.easy2lockMy在普通文件和文件夹上的测试对这两个示例都有效。我必须制作一个像你这样的文件并用它进行测试。尝试删除空字符串。当您只是使用replace删除某些内容时,可以省略第二个参数。因此,只需($\u.name-替换$Badextension)
Get-ChildItem -Filter *$BadExtension -Recurse | ForEach-Object {
    Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName ($_.name -replace $BadExtension)
}

Get-ChildItem -Filter *$BadExtension -Recurse | ForEach-Object {
    Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName $_.basename
}

Get-ChildItem -Filter "*$BadExtension" -Recurse |
    Select-Object Name,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
        Rename-Item -NewName {$_.Name -replace $BadExtension}

Get-ChildItem -Filter "*$BadExtension" -Recurse |
    Select-Object Basename,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
        Rename-Item -NewName {$_.baseName}